在我的手指已经在屏幕上之后,如何捕捉添加到DOM的元素上的touchmove事件
How can I catch touchmove events on an element that is added to the DOM after my finger is already on the screen?
我正在为iPad开发Javascript/html5项目。
我需要能够捕捉元素上的touchmove事件,该元素直到touchstart
事件触发后(即,直到一个人将手指放在屏幕上后)才被添加到DOM
我试过模拟touchstart
事件并用程序启动它。。。
$( "#container" ).append( element );
element.on( "touchmove", doStuff );
var ev = $.Event( "touchstart" );
element.trigger( ev );
然而,这并不奏效。我能让doStuff
开始发射的唯一方法是抬起手指,然后再次触摸屏幕,触发第二个touchstart
事件。
在我的手指已经在屏幕上之后,如何捕捉添加到DOM
的元素上的touchmove
事件?
总之,您似乎想要:
- ontouchstart:显示和定位一个样式化的div元素
- on touchmove:拖动元素而不释放并重新按下鼠标按钮
如果这种解释是正确的,那么答案是在最初点击的相同元素上处理touchmove事件,即"body"元素。不需要处理要拖动的元素(添加的元素)的触摸移动事件。
编写代码的方法肯定有很多。这里有一个,可能不是你想要的(主要是在定位数学中),但应该很容易适应:
var $element = $("<div class='element' />");
$("body").on({
'touchstart mousedown': function (e) {
$element.appendTo("body");
$(this).on('touchmove mousemove', move);
move(e);//you could do `$(this).trigger('touchmove', e)` but a conventional function call keeps `move` simple.
},
'touchend mouseup': function (e) {
$(this).off('touchmove mousemove');
}
});
function move(e) {
$element.css({
left: (e.pageX - 10) + 'px',
top: (e.pageY - 10) + 'px',
cursor: 'pointer'
});
}
mousedown/mousemove/mouseup允许进行桌面测试,并且可以在使用触摸设备时移除
DEMO
如果你只需要它触发一次,那么就很容易了
function addElement() {
$( "body" ).append( element );
element.on( "touchmove", doStuff );
element.trigger("touchmove");
}
http://jsfiddle.net/rx4qdtuj/8/
我在我的ipad模拟器上检查了这个。我用append代替了提醒,这样你就不会在ipad上不断收到提醒。
如果你想让它持续触发,我能想到的唯一可能的事情就是在创建的元素上伪造触摸移动
http://jsfiddle.net/rx4qdtuj/9/
var element = $("<div class='element' />");
$( "body" ).on( "touchstart", addElement );
$(".wrapper").on("touchmove", addElement);
function addElement() {
$( "body" ).append( element );
element.on( "touchmove", doStuff );
element.trigger("touchmove");
}
function doStuff() {
$('body').append('a ')
}
HTML
<div class="wrapper"></div>
CSS
.wrapper {
position: absolute;
top: 100px;
left: 100px;
width: 300px;
height: 300px;
}
移动实际上在已经创建的div包装器上触发,该包装器与创建的元素
请参阅文档可拖动功能
应用您的功能
<div id="track" class="track">
<div id="box2" style="left:0; top:0">Drag Me</div>
</div>
本地javascript
window.addEventListener('load', function(){
var box2 = document.getElementById('box2'),
boxleft, // left position of moving box
startx, // starting x coordinate of touch point
dist = 0, // distance traveled by touch point
touchobj = null // Touch object holder
box2.addEventListener('touchstart', function(e){
touchobj = e.changedTouches[0] // reference first touch point
boxleft = parseInt(box2.style.left) // get left position of box
startx = parseInt(touchobj.clientX) // get x coord of touch point
e.preventDefault() // prevent default click behavior
}, false)
box2.addEventListener('touchmove', function(e){
touchobj = e.changedTouches[0] // reference first touch point for this event
var dist = parseInt(touchobj.clientX) - startx // calculate dist traveled by touch point
// move box according to starting pos plus dist
// with lower limit 0 and upper limit 380 so it doesn't move outside track:
box2.style.left = ( (boxleft + dist > 380)? 380 : (boxleft + dist < 0)? 0 : boxleft + dist ) + 'px'
e.preventDefault()
}, false)
}, false)
相关文章:
- 将单击事件添加到数据表
- 将单击事件添加到附加的项目中
- 使用引导事件添加动画
- 如何将单击事件添加到JQuery中动态添加的元素中
- 如何在jQuery中将事件添加到新生儿元素中
- JQuery将侦听事件添加到.rezable(),然后附加DIV's
- jQuery:使用实时事件添加tabindex属性
- 将单击事件添加到显示字段
- 如何将事件添加到jQuery's on()回调
- 将此事件添加到工具栏
- TinyMCE 将另一个事件添加到粗体和斜体按钮
- 当用户在输入字段事件中输入内容时,为该字段事件添加动画占位符
- 使用 JQuery 将 onclick 事件添加到动态创建的定位点
- Raphaeljs 将点击事件添加到饼图的一部分
- 将事件添加到网格的coffeescript实现中
- 将事件添加到谷歌地图标记
- Javascript:将onkeydown事件添加到prompt()中
- 如何将onclick事件添加到joint.js元素中
- 角度指令:绑定'鼠标悬停'事件添加到元素
- 将事件添加到涉及for()的索引中的多个子节点