Как определить, изменился ли размер блока при изменении ширины окна, или нет?

V
На сайте с 04.06.2014
Offline
54
631

На сайте используется слайдер owl carousel. При разном разрешении экрана слайдер выглядит и работает по разному, поэтому при изменении ширины окна браузера при определенных размерах окна слайдер переинициализируется:

var ReviewsSlider = $(".reviews_slider");


function ReviewsSliderInit() {

var rBlockWidth = $("#reviews .review_photo_block").width();

ReviewsSlider.trigger("destroy.owl.carousel").removeClass("owl-carousel owl-loaded");
ReviewsSlider.find(".owl-stage-outer").children().unwrap();

if (rBlockWidth == 160) {
ReviewsSlider.owlCarousel({
items: 1,
loop: true,
mouseDrag: false,
touchDrag: false,
dots: false,
nav: true,
navText: "",
animateOut: "slideOutUp",
animateIn: "slideInUp",
onInitialized: function() {
setTimeout(function() {
var height = $("#reviews").height();
$("#reviews .review_slide").css("height", height+"px");
},500);
}
}).on("change.owl.carousel", function(eventData) {

if(eventData.property.name !== "position") return;

var data = $(this).data("owlCarousel"),
current = data.current(),
next = eventData.property.value;

data.settings.animateOut = next > current ? "slideOutUp" : "slideOutDown";
data.settings.animateIn = next > current ? "slideInUp" : "slideInDown";

});
}
else {
$("#reviews .review_slide").css("height", "auto");
ReviewsSlider.owlCarousel({
items: 1,
smartSpeed: 500,
loop: true,
mouseDrag: false,
touchDrag: false,
dots: false,
nav: true,
navText: "",
autoHeight: true,
onInitialized: function() {
setTimeout(function() {
$("#reviews .owl-height").css("height", "auto");
var height = $("#reviews .owl-height .active").height();
$("#reviews .owl-height").css("height", height+"px");

},500);
}
});
}

}

var ReviewsSliderTimeout;

ReviewsSliderInit();

$(window).resize( function() {
clearTimeout(ReviewsSliderTimeout);
ReviewsSliderTimeout = setTimeout(ReviewsSliderInit, 500);
});

Проблема в том, что слайдер переинициализируется при любом изменении размера окна, даже если не произошло изменение условия. Как сделать так, чтобы слайдер изменялся только при изменении условия? Например, изменяем размер окна браузера, как только у нас выполнилось условие rBlockWidth == 160, слайдер переинициализировался, и не переинициализируется, если мы и дальше увеличиваем ширину окна. Также и на уменьшение.

Партнёрка №1 в essay-нише (https://goo.gl/YfTPtG)
A
На сайте с 23.11.2016
Offline
7
#1

На сколько я понимаю у вас пости все попадает в else и этот код отрабатывает. Если он не нужен, то закомментируйте или удалите.

I2
На сайте с 07.03.2015
Offline
38
#2

Пробуйте так


var ReviewsSlider = $(".reviews_slider");
var flag = false;
function ReviewsSliderInit() {

var rBlockWidth = $("#reviews .review_photo_block").width();



if (rBlockWidth == 160 && flag) {
ReviewsSlider.trigger("destroy.owl.carousel").removeClass("owl-carousel owl-loaded");
ReviewsSlider.find(".owl-stage-outer").children().unwrap();
flag = false;
ReviewsSlider.owlCarousel({
items: 1,
loop: true,
mouseDrag: false,
touchDrag: false,
dots: false,
nav: true,
navText: "",
animateOut: "slideOutUp",
animateIn: "slideInUp",
onInitialized: function() {
setTimeout(function() {
var height = $("#reviews").height();
$("#reviews .review_slide").css("height", height+"px");
},500);
}
}).on("change.owl.carousel", function(eventData) {

if(eventData.property.name !== "position") return;

var data = $(this).data("owlCarousel"),
current = data.current(),
next = eventData.property.value;

data.settings.animateOut = next > current ? "slideOutUp" : "slideOutDown";
data.settings.animateIn = next > current ? "slideInUp" : "slideInDown";

});
}
else if ( (rBlockWidth > 160 && !flag) || (rBlockWidth < 160 && !flag) ) {
ReviewsSlider.trigger("destroy.owl.carousel").removeClass("owl-carousel owl-loaded");
ReviewsSlider.find(".owl-stage-outer").children().unwrap();
$("#reviews .review_slide").css("height", "auto");
flag = true;
ReviewsSlider.owlCarousel({
items: 1,
smartSpeed: 500,
loop: true,
mouseDrag: false,
touchDrag: false,
dots: false,
nav: true,
navText: "",
autoHeight: true,
onInitialized: function() {
setTimeout(function() {
$("#reviews .owl-height").css("height", "auto");
var height = $("#reviews .owl-height .active").height();
$("#reviews .owl-height").css("height", height+"px");

},500);
}
});
}

}

var ReviewsSliderTimeout;

ReviewsSliderInit();

$(window).resize( function() {
clearTimeout(ReviewsSliderTimeout);
ReviewsSliderTimeout = setTimeout(ReviewsSliderInit, 500);
});
Качественная верстка PSD макетов (/ru/forum/974524)
totamon
На сайте с 12.05.2007
Offline
437
#3
victorpavloff:
поэтому при изменении ширины окна браузера при определенных размерах окна слайдер переинициализируется

зачем? это игра такая что ли, размер окна браузера менять? лучше выполняйте круговые движения мышкой, от этого хоть быстродействие увеличивается))

Домены и хостинг https://8fn.ru/regru | Дедик от 3000р https://8fn.ru/73 | VPS в Москве https://8fn.ru/72 | Лучшие ВПС, ТП огонь, все страны! https://8fn.ru/inferno | ХОСТИНГ №1 РОССИИ https://8fn.ru/beget

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий