Touchenter和touchleave事件支持

时间:2014-04-16 14:00:16

标签: javascript html5 google-chrome web-applications

我在mozilla websitew3 website上阅读了有关touchenter和touchleave事件的信息,但找不到任何支持它的浏览器或任何模仿该效果的javascript库。

请建议在解决方法时可以做什么,因为我正在为某些鼠标悬停效果工作,当手指进入元素时触发事件,而不是当用户再次提起并触摸元素时触发。

谢谢:)

5 个答案:

答案 0 :(得分:16)

我建议您使用

document.elementFromPoint(touch.x, touch.y);

关于touchmove事件。

答案 1 :(得分:6)

答案 2 :(得分:1)

W3C删除了ontouchenter和ontouchleave,因此我们只能执行这些操作(使用zepto.js,touch.js,ontouchmove,elementFromPoint):

var last_touched_button='';
$('#container,#button1,#button2').on('touchmove',function(e){
      var ele=document.elementFromPoint(e.touches[0].clientX, e.touches[0].clientY);
      if (ele==document.getElementById('button1'))
      {last_touched_button='button1';
      }
      else if (ele==document.getElementById('button2'))
      {last_touched_button='button2';
      }
});
$('#container,#button1,#button2').on('swipeLeft',function(e){
      console.log('the button '+last_touched_button+' triggered swipe_into_left_side event or swipe_out_from_left_side event!');
});

答案 3 :(得分:1)

当前,核心上尚不支持此类事件,但是可以对它们进行模拟。

模拟触摸输入,触摸离开事件的最佳方法是在文档级事件中使用elementFromPoint

document.elementFromPoint(touch.x, touch.y);

使用className的示例

var onTouchEnterEvents = [];
var onTouchEnter = function (selector, fn) {
    onTouchEnterEvents.push([selector, fn]);
    return function () {
        onTouchEnterEvents.slice().map(function (e, i) {
            if (e[0] === selector && e[1] === fn) {
                onTouchEnterEvents.splice(1, i);
            }
        });
    };
};

document.addEventListener('touchmove', function (e) {
    var el = document.elementFromPoint(e.touches[0].clientX, e.touches[0].clientY);
    if (!el) return;
    onTouchEnterEvents.map((event) => {
        if (el.matches(event[0])) {
            event[1].apply(el, [e]);
        }
    });
});

///HOW TO USE
onTouchEnter('.my-element', function () {
    console.log('IT WORKS');
});

This GIST包含与上面相同的代码,为了进行改进,请在此处创建注释。

答案 4 :(得分:0)

有一个列表here表明版本兼容性。目前Chrome,Opera,iOS Safari,Android浏览器,Blackberry浏览器,Opera Mobile,Chrome for Android,Firefox for android支持此功能