如何防止图像滑块滚动太多?

时间:2014-05-13 05:40:00

标签: javascript jquery html css

我试图创建一个滑块,其中一个功能是可以通过鼠标事件移动到下一个和上一个。

它已经在工作但问题是当它到达终点时,它会继续滚动。这是我的JSfiddle

有什么想法吗?

var sliding,
    dir, 
    startClientX = 0,
    prevClientX = 0,
    $mainDiv = $('#main-div');

function move(dir, step) {
   var $ul = $mainDiv.find('.slider'),
       liWidth = $ul.find('div').width();

   $ul.animate({
      left: '+=' + (dir * liWidth)
   }, 200);
}

$mainDiv.mousedown(function (event) {
    sliding = true;
    startClientX = event.clientX;
    return false;
}).mouseup(function (event) {
    var step = event.clientX - startClientX, 
        dir = step > 0 ? 1 : -1;

    step = Math.abs(step);

    move(dir, step);
});

2 个答案:

答案 0 :(得分:0)

我建议不要编写自定义的javascript代码,而是使用jQuery cycle2插件,让您的生活更轻松。

http://jquery.malsup.com/cycle2/

答案 1 :(得分:0)

<强> Demo

您需要检查滑块是否到达;

var sliding,
    dir, 
    startClientX = 0,
    prevClientX = 0,
    $mainDiv = $('#main-div');

function move(dir, step) {
   var $ul = $mainDiv.find('.slider'),
       liWidth = $ul.find('div').width();
   var childCount = $(".slider div").length;
    if (((childCount - 1) * liWidth + getLeftPos()) <= 0) {
        return false;
    }
   $ul.animate({
      left: '+=' + (dir * liWidth)
   }, 200);
}

function getLeftPos() {
    var childPos = $(".slider").offset();
    var parentPos = $(".slider").parent().offset();
    return (childPos.left - parentPos.left);
}
$mainDiv.mousedown(function (event) {
    sliding = true;
    startClientX = event.clientX;
    return false;
}).mouseup(function (event) {
    var step = event.clientX - startClientX, 
        dir = step > 0 ? 1 : -1;

    step = Math.abs(step);

    move(dir, step);
});