用户界面-相当于'mouseleave'用于触摸交互



初步警告:我对js非常陌生,主要是通过网络搜索示例/教程获得的。

我正在写js,它应该在web和移动设备(例如iPad)上运行。

我们有一个库来帮助抽象mousetouch之间的差异:

if (navigator.userAgent.search('Mobile') > 0) {
  window.FLAGS = {
    start: 'touchstart',
    end: 'touchend',
    move: 'touchmove',
    click: 'click',
    touchScreen: true
  };
} else {
  window.FLAGS = {
    start: 'mousedown',
    end: 'mouseup',
    move: 'mousemove',
    click: 'click',
    touchScreen: false
  };
}

在代码中你可以这样做:

widget.view.bind(FLAGS.start, function(e) {

我正试图找到mouseleavetouch等价物,所以我可以做类似的技巧。

我可以想象通过跟踪move上的位置并将其与有问题的小部件的边界框进行比较来捕获leave事件的方法,但我希望有一个像touchstart/mousedown关系这样的小一行代码。

这是建议,但没有实现AFAIK: http://www.quirksmode.org/mobile/advisoryTouch.html

像这样的东西可能会起作用(从我的头脑中写出来,未经测试):

var element;
document.addEventListener('touchstart', function(event) {
    event.preventDefault();
    var touch = event.touches[0];
    element = document.elementFromPoint(touch.pageX,touch.pageY);
}, false);
document.addEventListener('touchmove', function(event) {
    event.preventDefault();
    var touch = event.touches[0];
    if (element !== document.elementFromPoint(touch.pageX,touch.pageY)) {
        touchleave();
    }
}, false);
function touchleave() { 
    console.log ("You're not touching the element anymore");
}

可以试试jquery的touchable插件

触发touch leave的整个想法是我们需要获得元素的范围。

例如,

框宽范围从0到实际宽度,框高范围从0到实际高度

所以如果X, Y值在这个范围内,那么我们就在框内如果不是这样,我们就离开了这个盒子。

检查这个片段以更好地说明。

// select the box that we will leave
const box = document.getElementById('box');
// add touchmove event to the box
box.addEventListener('touchmove', (e) => {
    // stop default behavior
    e.stopPropagation();
    e.preventDefault();
    e = e || window.event;
    // get box properties
    let a = box.getBoundingClientRect();
    // get current width
    let w = a.width;
    // get current height
    let h = a.height;
    // get values on x axis
    const x = e.touches[0].pageX - a.left; // to start the value from 0 (remove offsetleft)
    // get values on y axis
    const y = e.touches[0].pageY - a.top; // to start the value from 0 (remove offsettop)
    //! INFO
    // the box width range starts from [0 : w]
    // the box height range starts from [0 : h]
    // if X values between [0 , w] and Y values between [0 , h] then we inside the box | other than that then we left the box
    if ((x >= 0 && x <= w) && (y >= 0 && y <= h)) {
        console.log('in the box');
    } else {
        console.log('left the box');
    }
});
#box {
    width: 280px;
    height: 280px;
    outline: 1px solid red;
    margin: 100px auto;
}
<div id="box"></div>

相关内容

  • 没有找到相关文章

最新更新