我有一个我喜欢认为是编写的完美滑块——它动态地计算元素的数量、它们的宽度,并相应地调整自身。它可以通用,只需要基于顶级包装器 ID 的最少样式,并且适用于不同页面上的不同后退/下一个按钮和不同大小的滑动元素。但是当我试图在同一页面上做两个滑块时,我遇到了问题。我知道这与使我的变量本地化有关,我可能需要运行一个“每个”来覆盖一个页面上的两个滑块,但我对如何实现所有这些感到困惑。我认为我如何将其分解为 3 个功能使这变得更加困难。
我的 JS 粘贴在下面。如果您想通过 CSS 和 HTML 看到它在行动或不行动,请参阅http://www.anomie.info/test/test.html。[如果您想了解它应该如何工作,并且只使用页面上的一个滑块,请参阅http://www.anomie.info/test/test.zip并压缩所有内容。请注意在 zip 中的“确定”版本中,当有或没有更多滑块元素可供单击时,后退和前进按钮如何适当地打开和关闭。]
非常感谢任何和所有的指针!
// slider
if ($('.slider-inner-wrapper').length) {
$(window).load(function(){
slideImageVals = function() {
wrapperSliderWrapperWidth = $('.slider-inner-wrapper').width();
wrapperSliderInnerWidth = $('.slider-inner-inner .element-slide').width();
wrapperSliderInnerLength = $('.slider-inner-inner .element-slide').length;
wrapperSliderInnerMakeWidth = wrapperSliderWrapperWidth * wrapperSliderInnerLength;
$('.slider-inner-inner').width(wrapperSliderInnerMakeWidth);
wrapperSliderInnerSubWidth = wrapperSliderInnerWidth - wrapperSliderInnerMakeWidth;
}
slideImageVals();
slideImageChangeVals = function() {
wrapperSliderInnerPositionLeft = Math.round($('.slider-inner-inner').position().left);
wrapperSliderInnerSlideRight = (wrapperSliderInnerPositionLeft + wrapperSliderInnerWidth);
wrapperSliderInnerSlideLeft = (wrapperSliderInnerPositionLeft - wrapperSliderInnerWidth);
if ($('.slider-inner-inner .element-slide').length <= 1) {
$('.slider-button').hide();
}
if (wrapperSliderInnerPositionLeft < 0) {
$('.slider-button-back').addClass('active');
}
if (wrapperSliderInnerPositionLeft == 0) {
$('.slider-button-back').removeClass('active');
}
if (wrapperSliderInnerMakeWidth > wrapperSliderInnerWidth) {
$('.slider-button-next').addClass('active');
}
if (wrapperSliderInnerPositionLeft <= wrapperSliderInnerSubWidth) {
$('.slider-button-next').removeClass('active');
}
}
slideImageChangeVals();
slideImageHoldFlag = function() {
slideImageChangeVals();
wrapperSliderInnerFlagLeft = (wrapperSliderInnerPositionLeft / wrapperSliderInnerWidth);
}
slideImageHoldFlag();
});
$('.slider-button-next').click(function() {
if ($(this).hasClass('active')) {
$('.slider-inner-inner').animate({ 'left': wrapperSliderInnerSlideLeft }, {
duration: 1000,
specialEasing: {
left: "easeOutBack"
},
complete: function() {
slideImageHoldFlag();
}
});
}
});
$('.slider-button-back').click(function() {
if ($(this).hasClass('active')) {
$('.slider-inner-inner').animate({ 'left': wrapperSliderInnerSlideRight }, {
duration: 1000,
specialEasing: {
left: "easeOutBack"
},
complete: function() {
slideImageHoldFlag();
}
});
}
});
}
// end slider
出于某种原因,我无法让它在 jsfiddle 上运行。对于那些喜欢 jsfiddle 的人,我深表歉意。