我正在为响应式布局创建一个图库 - 我使用jQuery Riding Carousels作为缩略图。
当窗口重新调整为小于1024px时,旋转木马的方向需要从垂直变为水平......
我现在这样做:
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery('#mycarousel').jcarousel({
vertical: $(window).width() > 1008,
scroll: 3,
});
});
</script>
... JS只是挂钩一个类,但是如果你通过拖动来重新调整浏览器窗口的大小,它就不会这样做 - 你需要刷新页面。
有没有办法销毁脚本并在运行中重新初始化它?
答案 0 :(得分:4)
请查看工作预算:http://codebins.com/bin/4ldqpba/1/Jcarousel%20vertical%20on%20resize 在所有浏览器中测试过并且完美无缺。赏金是我的:) 在示例中,我给出的阈值为350,您可以通过调整结果窗格的大小来测试它,一旦启动水平滚动条,它就会转换为垂直滚动条。
根据您的要求,可能出现的问题是,如果您在图像上有任何处理程序,则在更改显示方式后它们将会消失。它的解决方案是将你的#mycarousel包装在div中并使用Jquery委托来处理包装器上的事件,所以事件也没有问题。 如果你遇到这种情况,请告诉我。
以下代码完全符合您的要求。
当窗口重新调整为小于1024px时,旋转木马的方向需要从垂直变为水平。
对于我来说这是一个逆转的例子,如果宽度较小则使其垂直更有意义。
jQuery(document).ready(function() {
var widthCheck = 1008;
var resizeTimer = null,
verticalFlg = $(window).width() > widthCheck;
var obj = jQuery('#mycarousel').clone();
$('#mycarousel').jcarousel({
vertical: verticalFlg,
scroll: 2
});
jQuery(window).resize(function() {
resizeTimer && clearTimeout(resizeTimer); // Cleraring old timer to avoid unwanted resize calls.
resizeTimer = setTimeout(function() {
var flg = ($(window).width() > widthCheck);
if (verticalFlg != flg) {
verticalFlg = flg;
$('#mycarousel').closest(".jcarousel-skin-tango").replaceWith($(obj).clone());
$('#mycarousel').jcarousel({
vertical: verticalFlg,
scroll: 2
});
}
}, 200);
});
})
答案 1 :(得分:1)
或者您可以查看来源。我猜你使用的是0.2版
看源头 https://github.com/jsor/jcarousel/blob/0.2/lib/jquery.jcarousel.js 我们可以看到有两行(80和81)只在对象init中完成。这些行是
this.wh = !this.options.vertical ? 'width' : 'height';
this.lt = !this.options.vertical ? (this.options.rtl ? 'right' : 'left') : 'top';
此行也在149
if (!this.options.vertical && this.options.rtl) {
this.container.addClass('jcarousel-direction-rtl').attr('dir', 'rtl');
}
如果你将这些添加到回调中,你可能会得到更好的结果。
您也可以尝试插件的0.3版本。
先前的回答:
现在不能自己测试,但试试这个:
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery('#mycarousel').jcarousel({
vertical: $(window).width() > 1008,
scroll: 3,
reloadCallback: function () {
this.options.vertical = $(window).width() > 1008;
},
});
});
</script>
答案 2 :(得分:0)
<script type="text/javascript">
jQuery(document).ready(function() {
var sizeCheck = function() {
return $(window).outerWidth() >= 1024
}
jQuery('#mycarousel').jcarousel({
vertical: sizeCheck(),
scroll: 3,
});
var jCarousel = jQuery('#mycarousel').data('jcarousel');
window.onresize = function() {
jCarousel.options.vertical = sizeCheck(); // maybe you have to access the option through jCarousel.plugin.options.vertical
jCarousel.reset();
}
});
</script>
也许这有用。
答案 3 :(得分:0)
我没有测试过以下代码,但我相信以下代码应该可以运行:
<script type="text/javascript">
var carousel;
jQuery(window).resize(function() {
if(carousel !== undefined) carousel.destroy();
carousel = jQuery('#mycarousel').jcarousel({
vertical: $(window).width() > 1008,
scroll: 3,
});
});
</script>
甚至更好的东西:
<script type="text/javascript">
var carousel;
jQuery(document).ready(function() {
carousel = jQuery('#mycarousel').jcarousel({
vertical: $(window).width() > 1008,
scroll: 3,
});
});
jQuery(window).resize(function() {
//NOT SURE WHICH OF THE BELOW LINES WOULD WORK, try both and check which works
carousel.options.vertical = $(window).width() > 1008;
carousel.vertical = $(window).width() > 1008;
carousel.reload();
});
</script>
如果没有,您应该在代码中添加console.log(carousel)
并查看原型的输出值(检查F12)。应该有一些破坏线(或者检查console.log($.jcarousel())
)。