jQuery ContextMenu事件在IOS 8.2中不起作用

jQuery ContextMenu event not working in IOS 8.2

本文关键字:不起作用 IOS ContextMenu 事件 jQuery      更新时间:2023-09-26

我在.html示例中使用contextMenu事件,当我长按div时,它会被触发,但现在它不起作用。在最新的IOS 8.2版本中出现了问题。这是示例代码,

<head>
    <title></title>
    <script src="Scripts/jquery-1.9.1.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $("#content").on("contextmenu", function () {
                alert("CM");
            });
        });
    </script>
</head>
<body>
    <div id="content" style="height:300px; width:300px; background-color:gray;"></div>
</body>

这是的工作样本

http://jsfiddle.net/4zu1ckgg/

请有人帮我做这件事。

基本上,在iOS上,触摸事件不会模拟为鼠标事件。使用触摸事件:"触摸开始"、"触摸移动"answers"触摸结束"。

在您的情况下,在iOS上,与Android相反,长时间触摸屏幕时不会触发"上下文菜单"。要在iOS上自定义长触摸,您应该使用以下内容:

// Timer for long touch detection
var timerLongTouch;
// Long touch flag for preventing "normal touch event" trigger when long touch ends
var longTouch = false;
$(touchableElement)
  .on("touchstart", function(event){
      // Prevent default behavior
      event.preventDefault();
      // Test that the touch is correctly detected
      alert("touchstart event");
      // Timer for long touch detection
      timerLongTouch = setTimeout(function() {
          // Flag for preventing "normal touch event" trigger when touch ends. 
          longTouch = true;
          // Test long touch detection (remove previous alert to test it correctly)
          alert("long mousedown");
      }, 1000);
  })
  .on("touchmove", function(event){
      // Prevent default behavior
      event.preventDefault();
      // If timerLongTouch is still running, then this is not a long touch 
      // (there is a move) so stop the timer
      clearTimeout(timerLongTouch);
      if(longTouch){
          longTouch = false;
          // Do here stuff linked to longTouch move
      } else {
          // Do here stuff linked to "normal" touch move
      }
  })
  .on("touchend", function(){
      // Prevent default behavior
      event.preventDefault();
      // If timerLongTouch is still running, then this is not a long touch
      // so stop the timer
      clearTimeout(timerLongTouch);
      if(longTouch){
          longTouch = false;
          // Do here stuff linked to long touch end 
          // (if different from stuff done on long touch detection)
      } else {
          // Do here stuff linked to "normal" touch move
      }
  });

以下是一个页面,解释(除其他外)触摸事件不会在每个操作系统上模拟为鼠标事件:http://www.html5rocks.com/en/mobile/touchandmouse/

希望这能有所帮助,我花了很长时间才弄清楚;)

相关文章: