JQuery 根据 window 大小重新加载三个设置变量
JQuery reload three settings variables based on window size
我正在尝试根据 window 的大小为 bxSlider 加载三个设置变量。我希望在调整浏览器大小时动态加载新设置,而不仅仅是加载时。我有以下设置变量的代码,我只是在努力让它与 mySlider 的底部变量很好地配合使用,这是在调整大小时加载脚本的内容。
有人可以提供提示吗?
$(document).ready(function () {
/* Set variables for the maxSlides option */
var slidenumber,
width = $(window).width();
if (width < 768) {
slidenumber = 1;
} else if (width < 1024) {
slidenumber = 2;
} else {
slidenumber = 3;
}
$('.bxslider').bxSlider({
slideWidth: 5000,
minSlides: slidenumber,
maxSlides: slidenumber,
slideMargin: 50
});
var mySlider;
function tourLandingScript() {
mySlider.reloadSlider(slidenumber());
}
mySlider = $('.bxslider').bxSlider(slidenumber());
$(window).resize(tourLandingScript);
});
实现此目的的最佳方法是使用 CSS 和媒体查询,这样您就可以隐藏或缩小幻灯片而不更改其数量。但是,如果您需要更复杂的行为,而这些行为无法通过普通 CSS 实现,则需要向其写入一些 javascript。
您需要监听 window 的调整大小事件,当它触发时,重新计算所需的幻灯片数量,如果它发生变化,则使用它的 reloadSlider() 方法更新滑块。代码可能看起来像这样:
$(document).ready(function () {
var slideCount;
var mySlider;
// separate function to calculate required slide count
function calculateSlides() {
var width = $(window).width();
var slidenumber;
if (width < 768) {
slidenumber = 1;
} else if (width < 1024) {
slidenumber = 2;
} else {
slidenumber = 3;
}
return slidenumber;
}
// when page loads, we initialize the slider
slideCount = calculateSlides();
mySlider = $('.bxslider').bxSlider({
slideWidth: 5000,
minSlides: slideCount,
maxSlides: slideCount,
slideMargin: 50
});
// when we resize the window, just recalculate number of slides
// and if it has changed, reload the slider
$(window).resize(function() {
var newSlideCount = calculateSlides();
if (newSlideCount != slideCount) {
slideCount = newSlideCount;
mySlider.reloadSlider({
minSlides: newSlideCount,
maxSlides: newSlideCount
});
}
});
});
我还添加了一些小优化,这样浏览器就不会在每次 window 调整大小时重建整个滑块组件(通过拖动边缘调整 window 大小时每秒触发几次),但仅在实际幻灯片数量发生变化的那一刻。
希望对您有所帮助。
感谢 Ondra Koupil 的帮助,但是我无法让他的解决方案完全按照要求工作,我最终选择了一种全新的方法,我确信它可以在为了优化,不太可能是最有效的选择,但它对我有用,希望对其他人有用。
下面的解决方案旨在成为两个完全独立的 JS 片段,如果合并在一个页面上将无法工作。目的是在相关页面加载相关选项(设置one/two)。
/* Settings one */
$(document).ready(function () {
var settings = function() {
var settings1 = { /* Desktop */
minSlides: 3,
maxSlides: 3,
moveSlides: 1,
slideWidth: 5000, /* Intentionally set to high value, bxslider will auto calculate */
slideMargin: 50
};
var settings2 = { /* Mobile */
minSlides: 1,
maxSlides: 1,
moveSlides: 1,
slideWidth: 2000 /* Intentionally set to high value, bxslider will auto calculate */
};
return ($(window).width()<1200) ? settings2 : settings1;
}
var mySlider;
function reloadonresize() {
mySlider.reloadSlider(settings());
}
mySlider = $('.bxslider').bxSlider(settings());
$(window).resize(reloadonresize);
});
/* End settings */
/* Settings two */
$(document).ready(function () {
var settings = function() {
var settings1 = { /* Desktop */
minSlides: 4,
maxSlides: 5,
moveSlides: 3,
slideWidth: 5000, /* Intentionally set to high value, bxslider will auto calculate */
slideMargin: 50
};
var settings2 = { /* Mobile */
minSlides: 2,
maxSlides: 2,
moveSlides: 1,
slideWidth: 2000 /* Intentionally set to high value, bxslider will auto calculate */
};
return ($(window).width()>=768) ? settings1 : settings2;
}
var mySlider;
function reloadonresize() {
mySlider.reloadSlider(settings());
}
mySlider = $('.bxslider').bxSlider(settings());
$(window).resize(reloadonresize);
});
/* End settings */
我正在尝试根据 window 的大小为 bxSlider 加载三个设置变量。我希望在调整浏览器大小时动态加载新设置,而不仅仅是加载时。我有以下设置变量的代码,我只是在努力让它与 mySlider 的底部变量很好地配合使用,这是在调整大小时加载脚本的内容。
有人可以提供提示吗?
$(document).ready(function () {
/* Set variables for the maxSlides option */
var slidenumber,
width = $(window).width();
if (width < 768) {
slidenumber = 1;
} else if (width < 1024) {
slidenumber = 2;
} else {
slidenumber = 3;
}
$('.bxslider').bxSlider({
slideWidth: 5000,
minSlides: slidenumber,
maxSlides: slidenumber,
slideMargin: 50
});
var mySlider;
function tourLandingScript() {
mySlider.reloadSlider(slidenumber());
}
mySlider = $('.bxslider').bxSlider(slidenumber());
$(window).resize(tourLandingScript);
});
实现此目的的最佳方法是使用 CSS 和媒体查询,这样您就可以隐藏或缩小幻灯片而不更改其数量。但是,如果您需要更复杂的行为,而这些行为无法通过普通 CSS 实现,则需要向其写入一些 javascript。
您需要监听 window 的调整大小事件,当它触发时,重新计算所需的幻灯片数量,如果它发生变化,则使用它的 reloadSlider() 方法更新滑块。代码可能看起来像这样:
$(document).ready(function () {
var slideCount;
var mySlider;
// separate function to calculate required slide count
function calculateSlides() {
var width = $(window).width();
var slidenumber;
if (width < 768) {
slidenumber = 1;
} else if (width < 1024) {
slidenumber = 2;
} else {
slidenumber = 3;
}
return slidenumber;
}
// when page loads, we initialize the slider
slideCount = calculateSlides();
mySlider = $('.bxslider').bxSlider({
slideWidth: 5000,
minSlides: slideCount,
maxSlides: slideCount,
slideMargin: 50
});
// when we resize the window, just recalculate number of slides
// and if it has changed, reload the slider
$(window).resize(function() {
var newSlideCount = calculateSlides();
if (newSlideCount != slideCount) {
slideCount = newSlideCount;
mySlider.reloadSlider({
minSlides: newSlideCount,
maxSlides: newSlideCount
});
}
});
});
我还添加了一些小优化,这样浏览器就不会在每次 window 调整大小时重建整个滑块组件(通过拖动边缘调整 window 大小时每秒触发几次),但仅在实际幻灯片数量发生变化的那一刻。
希望对您有所帮助。
感谢 Ondra Koupil 的帮助,但是我无法让他的解决方案完全按照要求工作,我最终选择了一种全新的方法,我确信它可以在为了优化,不太可能是最有效的选择,但它对我有用,希望对其他人有用。
下面的解决方案旨在成为两个完全独立的 JS 片段,如果合并在一个页面上将无法工作。目的是在相关页面加载相关选项(设置one/two)。
/* Settings one */
$(document).ready(function () {
var settings = function() {
var settings1 = { /* Desktop */
minSlides: 3,
maxSlides: 3,
moveSlides: 1,
slideWidth: 5000, /* Intentionally set to high value, bxslider will auto calculate */
slideMargin: 50
};
var settings2 = { /* Mobile */
minSlides: 1,
maxSlides: 1,
moveSlides: 1,
slideWidth: 2000 /* Intentionally set to high value, bxslider will auto calculate */
};
return ($(window).width()<1200) ? settings2 : settings1;
}
var mySlider;
function reloadonresize() {
mySlider.reloadSlider(settings());
}
mySlider = $('.bxslider').bxSlider(settings());
$(window).resize(reloadonresize);
});
/* End settings */
/* Settings two */
$(document).ready(function () {
var settings = function() {
var settings1 = { /* Desktop */
minSlides: 4,
maxSlides: 5,
moveSlides: 3,
slideWidth: 5000, /* Intentionally set to high value, bxslider will auto calculate */
slideMargin: 50
};
var settings2 = { /* Mobile */
minSlides: 2,
maxSlides: 2,
moveSlides: 1,
slideWidth: 2000 /* Intentionally set to high value, bxslider will auto calculate */
};
return ($(window).width()>=768) ? settings1 : settings2;
}
var mySlider;
function reloadonresize() {
mySlider.reloadSlider(settings());
}
mySlider = $('.bxslider').bxSlider(settings());
$(window).resize(reloadonresize);
});
/* End settings */