Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何避免拖动时意外单击事件?_Javascript_Jquery_Slick.js - Fatal编程技术网

Javascript 如何避免拖动时意外单击事件?

Javascript 如何避免拖动时意外单击事件?,javascript,jquery,slick.js,Javascript,Jquery,Slick.js,我有一个使用Slick构建的滑块,每个幻灯片都有一个数据属性,当单击幻灯片时,该属性会被复制到一个输入字段,然后提交该输入字段上有值的表单 问题是,如果我有一个多张幻灯片“可能通过从上面的选择框中选择Kissen=>Sitz,然后尝试拖动幻灯片滚动浏览它们,这可能会导致点击事件(大多数情况下都会发生,但并不总是如此),所以我想知道是否有一种简单的方法可以防止意外点击 <form name="product_select" id="product_select_form" action="c

我有一个使用Slick构建的滑块,每个幻灯片都有一个数据属性,当单击幻灯片时,该属性会被复制到一个输入字段,然后提交该输入字段上有值的表单

问题是,如果我有一个多张幻灯片“可能通过从上面的选择框中选择Kissen=>Sitz,然后尝试拖动幻灯片滚动浏览它们,这可能会导致点击事件(大多数情况下都会发生,但并不总是如此),所以我想知道是否有一种简单的方法可以防止意外点击

<form name="product_select" id="product_select_form" action="conctact-details/" method="post">
<input type="text" id="product_id" name="product_id">
</form>
<div class="slick-slider">    
    <div class="slick-slide" data-product-id="1" data-product-cat="1"><img src="https://www.solodev.com/assets/carousel/image1.png">Orthopädisches Sitzkissen</div>
    <div class="slick-slide" data-product-id="2" data-product-cat="1"><img src="https://www.solodev.com/assets/carousel/image2.png">Hämorrhoiden Kissen</div>
    <div class="slick-slide" data-product-id="3" data-product-cat="1"><img src="https://www.solodev.com/assets/carousel/image3.png">Rückenkissen</div>
    <div class="slick-slide" data-product-id="4" data-product-cat="1"><img src="https://www.solodev.com/assets/carousel/image4.png">Comfort Cushion</div>
    <div class="slick-slide" data-product-id="5" data-product-cat="1"><img src="https://www.solodev.com/assets/carousel/image5.png">All-in-one</div>
    <div class="slick-slide" data-product-id="6" data-product-cat="1"><img src="https://www.solodev.com/assets/carousel/image6.png">Aufstehkissen</div>
    <div class="slick-slide" data-product-id="7" data-product-cat="1"><img src="https://www.solodev.com/assets/carousel/image7.png">Wedge Cushion</div>
</div>

禁止:
我在这方面也遇到了麻烦

我所做的是跟踪mousedown事件和mouseup事件之间是否有移动。我计算鼠标的每次移动,然后将其添加到计数器中

每次鼠标向下,我都会将计数器重置为0

如果移动过大,则不视为单击

let dragmovement = 0;
$('#slick-selector').click(function(e){
    if(dragmovement <= 20){
        // proceed with click event if mouse movement is minimal
        // change constant depending on your level of tolerance 
        console.log("clicked, not dragged")
    }
})

$(".#slick-selector").mousedown(function(e){dragmovement = 0;
//onmousedown inside the element, set counter to 0

// start tracking mouse movement
    $(document).mousemove(function(){dragmovement++;})
    //even mouse movement outside the slick is tracked
    //every movement will add +1 to counter

}).mouseup(function(){
    $(document).unbind('mousemove')
// release mouse movement tracker
})
让拖动运动=0;
$(“#光滑选择器”)。单击(函数(e){

如果(dragmovement@RobertHarvey)我对JS不是很熟悉,但我猜它会听mouseup mousedown和mousemove事件,所以如果你在不移动鼠标的情况下单击幻灯片,表单将被提交,如果你在移动鼠标的时候单击它,那么什么也不会发生。顺便说一句,对于我的应用程序,容差的值是7。这是一个最佳点。

$('.slick-slide').on('mousedown', function (evt) {
  $('.slick-slide').on('mouseup mousemove', function handler(evt) {
    if (evt.type === 'mouseup') {
      $product_id = $(this).data('product-id');
       $('#product_select_form').submit();
       $('#product_id').val($product_id);
    }
    $('.slick-slide').off('mouseup mousemove', handler);
  });
});
let dragmovement = 0;
$('#slick-selector').click(function(e){
    if(dragmovement <= 20){
        // proceed with click event if mouse movement is minimal
        // change constant depending on your level of tolerance 
        console.log("clicked, not dragged")
    }
})

$(".#slick-selector").mousedown(function(e){dragmovement = 0;
//onmousedown inside the element, set counter to 0

// start tracking mouse movement
    $(document).mousemove(function(){dragmovement++;})
    //even mouse movement outside the slick is tracked
    //every movement will add +1 to counter

}).mouseup(function(){
    $(document).unbind('mousemove')
// release mouse movement tracker
})