有没有一种方法可以在同一元素上实现“单击”,“双击”和“单击并按住”?

时间:2019-08-08 08:29:09

标签: javascript html vue.js nuxt.js

我想实现类似于在Android上单击Instagram中的帖子(我认为在iOS上应该具有相同的功能)。在Instagram中,如果有人单击照片,则将其打开,双击,它会被赞,然后单击并按住将打开带有该图像和一些文本/按钮的弹出窗口。 Instagram仅在Native App中执行此操作,而不是在其PWA中执行此操作,但我想在我的PWA中实现类似的功能。

[未尝试,因为我希望找到一种“官方”方式]:我认为,可以通过mousedown mouseup和自定义函数来计数秒数。

但这真的是“完美”的方式吗?

3 个答案:

答案 0 :(得分:2)

Clik and hold

请参考以下帖子, 如果单击并保持一段时间,它将打开菜单。 Click and Hold event listener with Javascript

双击

<p ondblclick="myFunction()">Double-click me</p> https://www.w3schools.com/jsref/event_ondblclick.asp

请参见下面的示例,我添加了双击和click & hold

 function doubleClickFunction(){
    $('.hold_trigger').css({'border':'1px solid red'});
  }
var timeout_id = 0,
    hold_time = 1000,
    hold_menu = $('.hold_menu'),
    hold_trigger = $('.hold_trigger');

hold_menu.hide();

hold_trigger.mousedown(function() {
    timeout_id = setTimeout(menu_toggle, hold_time);
}).bind('mouseup mouseleave', function() {
    clearTimeout(timeout_id);
});

function menu_toggle() {
  hold_menu.toggle();
}
ul.hold_menu {
  list-style: none;
  padding: 0;
  margin: 0;
}

ul.hold_menu a, div.hold_trigger  {
   display: inline-block;
   padding: 5px 15px;
   border: 1px solid #ccc;
   width: 300px;
}

ul.hold_menu a:link, ul.hold_menu a:visited {
   color: black;
   text-decoration: none;
}

ul.hold_menu a:active, ul.hold_menu a:hover {
   background: #ff0;
   text-decoration: none;
}

div.hold_trigger {
   color: black;
   cursor: pointer;
}

div.hold_trigger:hover {
   background: #ccc;
}
 <div class="hold_trigger" ondblclick="doubleClickFunction()">Click and hold to toggle the menu</div>
  <ul class="hold_menu">
     <li><a href="#">Option 1</a></li>
     <li><a href="#">Option 2</a></li>
     <li><a href="#">Option 3</a></li>
  </ul>
  <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>

答案 1 :(得分:0)

JavaScript具有clickdblclick事件。但是在单个元素中同时使用这两个元素并不是很好,因为它将触发两个事件。

Here是您所提到的javascript中双击的实现。

答案 2 :(得分:0)

然后我通过https://www.npmjs.com/package/vue2-touch-events解决了VueJS的问题。简单查询何时按下(开始)元素以及何时停止压力并计算之间的时间。如果超过了x秒,则会弹出一个弹出窗口,如果您放开而没有达到秒,则会执行正常的点击。

相关问题