Javascript jQuery拖放速度减慢

Javascript jQuery拖放速度减慢,javascript,jquery,jquery-ui,drag-and-drop,slider,Javascript,Jquery,Jquery Ui,Drag And Drop,Slider,是否可以降低可拖动元件的速度 我已经用jQuery拖放构建了一个简单的滑块。当滑块元素(可拖动元素)移动到特定位置时,图片淡入淡出。因此,如果移动可拖动元素的速度不太快,则看起来可以使用滑块处理图片动画。现在,我想减慢可拖动元素的速度。因此,用户永远不能将元素拖得太快 这是我的代码示例 $('.slider').mousemove(function(){ if($(this).position().left >= 0 && $(this).position().left

是否可以降低可拖动元件的速度

我已经用jQuery拖放构建了一个简单的滑块。当滑块元素(可拖动元素)移动到特定位置时,图片淡入淡出。因此,如果移动可拖动元素的速度不太快,则看起来可以使用滑块处理图片动画。现在,我想减慢可拖动元素的速度。因此,用户永远不能将元素拖得太快

这是我的代码示例

$('.slider').mousemove(function(){

 if($(this).position().left >= 0 && $(this).position().left <= 2 ) {
  $('.slider_1').fadeIn();
  $('.slider_2').fadeOut();
 }
...

我希望有人能帮助我:

啊!最后是一个有趣的jQuery问题

这是绝对可以做到的。下面我已经解释了怎么做。如果您想直接进入演示

假设您的HTML设置如下:

<div id="slider">
    <div id="bar"></div>
</div>
然后,您可以使用jQuery的.fadeTo中的$'bar'.offset.left或其他函数来更改您正在谈论的图像的不透明度

这一切看起来都很琐碎,但事实并非如此。在尝试实现这一点时存在一些问题。例如:

ui.position.left += (ui.offset.left - ui.originalPosition.left - leftOffset)*SPEED;
当滑块达到最大滑动距离时,应停止设置动画或重置。您可以通过多种方式实现这一点,但我认为最简单的解决方案是编写一个.mousedown/.mouseup侦听器,用于更新变量拖动,以跟踪用户是否仍在尝试拖动工具栏。如果不是,则重置栏。如果是,请将滑块保持在最大距离,直到触发.mouseup

此外,必须小心使用预定义的边框

我建议的守则如下:

// Specify your variables here
var SPEED = -0.6;
var border = 1;           // specify border width that is used in CSS
var fadeSpeed = 0;        // specify the fading speed when moving the slider
var fadeSpeedBack = 500;  // specify the fading speed when the slider reverts back to the left

// Some pre-calculations
var dragging = false;
var slider = $('#slider');
var leftOffset = slider.offset().left + border;
var adjustedSliderWidth = 0.5*slider.width();

// the draggable function
$('#bar').draggable({
    axis: "x",
    revert : function(event, ui) {
            $(this).data("draggable").originalPosition = {
                top : 0,
                left : 0
            };
            $('#image').fadeTo(fadeSpeedBack, 0);
            return !event;
        },
    drag: function (event, ui) {
        var barOffset = $('#bar').offset().left - leftOffset;
        if (barOffset >= 0) {
            if (barOffset < adjustedSliderWidth) {
              ui.position.left += (ui.offset.left - ui.originalPosition.left - leftOffset)*SPEED;    
            } else {
              if (!dragging) { return false; } 
                else { ui.position.left = adjustedSliderWidth; }
            }
        }
        // fading while moving:
        $('#image').fadeTo(fadeSpeed, (ui.position.left/adjustedSliderWidth));
        
        // remove this if you don't want the information to show up:
        $('#image').html(ui.position.left/adjustedSliderWidth
                        +"<br \><br \>"
                        +ui.position.left);
    }
});

// the mouse listener
$("#bar").mousedown(function(){ dragging = true; });
$("#bar").mouseup(function(){ dragging = false; });
因此,负值给出较慢的拖动速度,正值给出较快的拖动速度

不幸或事实上:幸运的是,无法更改鼠标指针的速度。这是因为只有操作系统可以控制鼠标坐标和速度。浏览器无法影响这一点。就我个人而言,我认为这无关紧要:移动滑块的速度要比正常速度慢,这是你想要达到的目标,所以你可以忽略鼠标指针

为了让所有这些都发挥作用,我为您准备了一个实用的JSFIDLE:


我希望这能帮助你:

啊!最后是一个有趣的jQuery问题

这是绝对可以做到的。下面我已经解释了怎么做。如果您想直接进入演示

假设您的HTML设置如下:

<div id="slider">
    <div id="bar"></div>
</div>
然后,您可以使用jQuery的.fadeTo中的$'bar'.offset.left或其他函数来更改您正在谈论的图像的不透明度

这一切看起来都很琐碎,但事实并非如此。在尝试实现这一点时存在一些问题。例如:

ui.position.left += (ui.offset.left - ui.originalPosition.left - leftOffset)*SPEED;
当滑块达到最大滑动距离时,应停止设置动画或重置。您可以通过多种方式实现这一点,但我认为最简单的解决方案是编写一个.mousedown/.mouseup侦听器,用于更新变量拖动,以跟踪用户是否仍在尝试拖动工具栏。如果不是,则重置栏。如果是,请将滑块保持在最大距离,直到触发.mouseup

此外,必须小心使用预定义的边框

我建议的守则如下:

// Specify your variables here
var SPEED = -0.6;
var border = 1;           // specify border width that is used in CSS
var fadeSpeed = 0;        // specify the fading speed when moving the slider
var fadeSpeedBack = 500;  // specify the fading speed when the slider reverts back to the left

// Some pre-calculations
var dragging = false;
var slider = $('#slider');
var leftOffset = slider.offset().left + border;
var adjustedSliderWidth = 0.5*slider.width();

// the draggable function
$('#bar').draggable({
    axis: "x",
    revert : function(event, ui) {
            $(this).data("draggable").originalPosition = {
                top : 0,
                left : 0
            };
            $('#image').fadeTo(fadeSpeedBack, 0);
            return !event;
        },
    drag: function (event, ui) {
        var barOffset = $('#bar').offset().left - leftOffset;
        if (barOffset >= 0) {
            if (barOffset < adjustedSliderWidth) {
              ui.position.left += (ui.offset.left - ui.originalPosition.left - leftOffset)*SPEED;    
            } else {
              if (!dragging) { return false; } 
                else { ui.position.left = adjustedSliderWidth; }
            }
        }
        // fading while moving:
        $('#image').fadeTo(fadeSpeed, (ui.position.left/adjustedSliderWidth));
        
        // remove this if you don't want the information to show up:
        $('#image').html(ui.position.left/adjustedSliderWidth
                        +"<br \><br \>"
                        +ui.position.left);
    }
});

// the mouse listener
$("#bar").mousedown(function(){ dragging = true; });
$("#bar").mouseup(function(){ dragging = false; });
因此,负值给出较慢的拖动速度,正值给出较快的拖动速度

不幸或事实上:幸运的是,无法更改鼠标指针的速度。这是因为只有操作系统可以控制鼠标坐标和速度。浏览器无法影响这一点。就我个人而言,我认为这无关紧要:移动滑块的速度要比正常速度慢,这是你想要达到的目标,所以你可以忽略鼠标指针

为了让所有这些都发挥作用,我为您准备了一个实用的JSFIDLE:

我希望这能帮助你: