在移动网络上触发触摸事件
Trigger touch events on mobile web
我正在尝试弄清楚如何在移动浏览器中触发触摸事件以进行测试。我不是网络开发人员,所以这对我来说有点陌生。
此时,我正在尝试捕获由我触摸屏幕创建的实际触摸事件,并重新触发它们以触发相同的响应。以下是我在移动 amazon.com 页面上所做的操作,期望轮播重复滑动,就像我实际上用手指滑动它一样。但是,轮播不会滑动。浏览器似乎对我的重新触发事件与本机事件不同。我在Android上的Chrome中运行它。
有没有人看到这种行为并知道我应该解决什么?
// EDITED after taking into consideration @Palpatim's suggestion
// stash away events on a carousel
var element = document.querySelector('.gw-carousel-viewport');
document.test_touch_move = []
element.addEventListener('touchstart', function(e){document.test_touch_start = e;}, false);
element.addEventListener('touchmove', function(e){document.test_touch_move.push(e);}, false);
element.addEventListener('touchend', function(e){document.test_touch_end = e;}, false);
//
// physically slide the carousel with my finder to trigger events
//
// store captured events from being overriden
var touch_start = document.test_touch_start;
var touch_move = document.test_touch_move;
var touch_end = document.test_touch_end;
//
// physically slide the carousel back to its initial position to make sure all event screen coordinates match
//
element.dispatchEvent(touch_start);
touch_move.forEach(function(e){element.dispatchEvent(e);});
element.dispatchEvent(touch_end);
// I do not see the same sliding behavior as I see when actually swiping with my finger
您只存储touchend
事件之一,但很可能需要多个事件才能正确模拟手指轻扫。例如,在移动设备中打开此演示。
您将看到滑动滚动的div 会导致记录多个touchmove
事件,这些事件会在手指在页面上移动时跟踪您的手指。
var log = document.getElementById('log');
var logEvent = function(ev) {
var d = new Date();
var msg = document.createTextNode(d.getTime() + ' :: received ' + ev.type + ''n');
log.appendChild(msg);
};
// stash away events on a carousel
var element = document.getElementById('listener');
element.addEventListener('touchstart', logEvent, false);
element.addEventListener('touchmove', logEvent, false);
element.addEventListener('touchend', logEvent, false);
#log,
#listener {
width: 40%;
position: absolute;
top: 5%;
bottom: 5%;
overflow-x: hidden;
overflow-y: auto;
}
#listener {
padding: 0 2%;
border: 1px solid green;
left: 2%;
}
#log {
border: 1px solid blue;
right: 2%;
}
<div id="listener">
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
<p>I am a long scrolling div.</p>
</div>
<pre id="log"></pre>
相关文章:
- 谷歌地图劫持了iphone's滚动(触摸事件)-如何恢复
- 如何使用纯javascript的移动触摸事件
- 移动定时触摸事件
- 模拟html5的触摸事件
- Phonegap/Cordova:如何添加Javascript多点触摸事件
- 如何在AngularJS中监听点击事件,而不是触摸事件
- 我可以让我的网站的内容可编辑区域对安卓股票浏览器上的触摸事件更敏感吗
- 在 Firefox 中“解析”触摸事件
- 将触摸事件转换为鼠标事件仅每秒有效一次
- 在移动 Safari 上向下拖动时,触摸事件停止触发 - iPad HTML5
- 如何在 javascript 中触发触摸事件
- 为什么触摸事件不在手指按压的中间
- 如何启用离子多点触摸事件
- 当我将位置更改为绝对时,画布精灵表和触摸事件不起作用
- 当元素在事件绑定后附加到DOM时,触摸事件不起作用
- JavaScript的触摸事件
- Tizen可穿戴设备屏幕顶部的Javascript触摸事件
- 用标准javascript而不是jquery中的mousedown、mousemove和mouseup触摸事件句柄
- (窗口中的'ontouchstart')返回true,但没有触摸事件
- 传单触摸事件未触发