初步警告:我对js非常陌生,主要是通过网络搜索示例/教程获得的。
我正在写js,它应该在web和移动设备(例如iPad)上运行。
我们有一个库来帮助抽象mouse
和touch
之间的差异:
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) {
我正试图找到mouseleave
的touch
等价物,所以我可以做类似的技巧。
我可以想象通过跟踪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>