【问题标题】:jQuery change value input when drag the mouse up and down上下拖动鼠标时jQuery更改值输入
【发布时间】:2016-11-16 15:25:23
【问题描述】:

当您在输入类型文本中单击并向上拖动鼠标以增加值并向下拖动以减小值时,如何使输入类型文本更改其值。只有当鼠标上下移动时,输入的值才会改变(验证最小值 y 最大值)我有这个但我不能让它如愿以偿。

JSBin Example

var clicking = false;
$('#change_value_up_down').mousedown(function(){
    clicking = true;
    $('.clickstatus').text('mousedown');
});
var i = 0;
var y = 0;
$('#change_value_up_down').mousemove(function(my){
    if(clicking === false) return;

    // change value
    y = my.pageY - this.offsetTop;
    $(this).val(y);

    // Mouse click + moving logic here
    $('.movestatus').text('mouse moved ' + i);
  i++;
});
$('.selector').mouseup(function() {
  i = 0;
});

【问题讨论】:

    标签: jquery mousemove mousedown


    【解决方案1】:

    你也可以使用fiddle

    JS:

        var clicking = false;
            $('this').click(function () {
                clicking = false;
            });
            $('#change_value_up_down').mouseover(function () {
                clicking = true;
            });
            var i = 0;
            var y = 0;
            $(this).mousemove(function(my){
                if(clicking === false) 
                {
                    return false;
                }
                else
                {
                    // change value
                    if (my.pageY <= $('#change_value_up_down').offset().top + $('#change_value_up_down').css('width').replace('px', '')/10) 
                    {
                        y = parseInt($('#change_value_up_down').val()) +1 ;
                        $('.movestatus').text('plus');
                        }
                    else
                    {
                        y =  parseInt($('#change_value_up_down').val()) -1;
                        $('.movestatus').text('minus');
                        }
                    $('#change_value_up_down').val(parseInt(y));  
                    // Mouse click + moving logic here
                    //$('.movestatus').text('mouse moved ' + i);
                    i++;
                }
            });
            $('#change_value_up_down').mouseup(function(e) {
                clicking = false;
                //e.stopPropagation();
            });
            $('.selector').mouseup(function(e) {
                i = 0;
            });
    

    【讨论】:

    • 只有在点击时才应该增加或减少,并从上到下移动,不按时不应该做任何动作
    • 查看fiddle
    • 这很好,但我希望它只在按下点击时增加,因为目前它在你上下移动鼠标而不按下点击时正在做(我认为它在 mousedown一切都应该运行的事件)
    • 这是我想要引起的效果,只有当它从上到下移动但按下输入recordit.co/YJovptdj9f的点击时才会增加和减少输入值
    • 这工作正常,但只在Firefox中,但在chrome中不一样,因为它可以调试jsfiddle.net/pandeyvishal1986/ggqzb27f/#
    【解决方案2】:

    Working fiddle.

    我认为您想要类似以下示例的内容。

    var down = false;
    var my = $("#change_value_up_down").offset().top;
    var counter;
    
    $(document).mousedown(function() {
      down = true;
    }).mouseup(function() {
      down = false;  
      clearInterval(counter);
    });
    
    $("#change_value_up_down").mouseenter(function(e) {
      clearInterval(counter);
    })
    
    $("#change_value_up_down").mouseout(function(e) {
      var current_value = $(this).val();
      var self = $(this);
    
      if(down) {
        if(e.clientY<my) {
           counter = setInterval(function(){
              self.val(current_value++);
           },300);
        }else{
          counter = setInterval(function(){
              self.val(current_value--);
           },300);
        }
      }
    });
    

    希望这会有所帮助。

    var down = false;
    var speed = 100;
    var my = $("#change_value_up_down").offset().top;
    var counter;
    
    $(document).mousedown(function() {
      down = true;
    }).mouseup(function() {
      down = false;  
      clearInterval(counter);
    });
    $("#change_value_up_down").mouseenter(function(e) {
      clearInterval(counter);
    })
    
    $("#change_value_up_down").mouseout(function(e) {
      var current_value = $(this).val();
      var self = $(this);
      
      if(down) {
        if(e.clientY<my) {
           counter = setInterval(function(){
           		self.val(current_value++);
           },speed);
        }else{
          counter = setInterval(function(){
           		self.val(current_value--);
           },speed);
        }
      }
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <br><br>
    <br><br>
    <input type="text" value=5 id="change_value_up_down" size="2" style="cursor:n-resize;"/>

    【讨论】:

    • 是的,但是当你向上拖动鼠标时它会自动计数,当你释放点击时应该停止
    • 点击未按下时必须停止,例如不发生recordit.co/2tsvYFFw5h
    • 我无法重现相同的错误,在我的屏幕上,当鼠标未点击时,mouseup 事件将触发并且计数器将由clearInterval(counter) 停止,请检查小提琴是否会给出你同样的问题。
    • 这是我想要引起的效果,只有当它从上到下移动但按下输入recordit.co/YJovptdj9f的点击时才会增加和减少输入值
    • 这工作正常,但只在Firefox中,但在chrome中不一样,因为它可以调试jsfiddle.net/pandeyvishal1986/ggqzb27f/#
    【解决方案3】:

    我可以在它制作的另一种语言的帖子中找到答案,目前非常有效。

    https://es.stackoverflow.com/questions/34265/jquery-funcion-que-permita-a-n-numeros-de-inputs-hacer-incremento-decremento-por/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-08
      • 2011-06-24
      • 2018-03-29
      • 2013-01-30
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      • 2020-12-18
      相关资源
      最近更新 更多