Js实现移动端长按事件

JavaScript011

Js实现移动端长按事件,第1张

最近在做一个移动端的项目,其中有一个收藏列表,其中包含几个事件。

1.点击跳转详情页。

2.长按显示遮罩层和删除按钮

3.点击删除按钮,删除此项。

下面会详细介绍我处理此问题时所出现的问题,及处理方法(本文基于jQuery)

首先我对列表添加了长按事件,添加完之后,发现我的长按事件已经可以成功执行了。但是却出现了新的问题:

这个问题好处理,只需添加一个变量,来判断是否为长按事件

这样上面的问题就完美解决了。

接下来就是给遮罩层上的删除按钮添加事件

但是在这里就发现了新的问题

所以就需要一个新的事件来覆盖原本的事件

然后,整个点击跳转,长按显示删除,删除事件,就已经完美解决了。

但是,在移动端查看的时候就会发现正常的滚动事件被preventDefault屏蔽了。

此处有两种解决方式:

1.删除 e.preventDefault()

删除preventDefault有可能会出现其它情况,不过我暂时没发现如果出现其它情况,可使用下面的方法

删除的点击事件也是如此

By : Yimi-shan

你别用ID应该就好了。

你这样:

$("table").click(function (){})

应该就可以了。(因为在一个HTML文件里,标签的ID是不能重复的)

现在我有个窗口坐标X,Y. 如何利用JS点击该坐标?

https://developer.mozilla.org/zh-CN/docs/Web/API/Document/createEvent

遍历dom元素,记录每个元素的坐标,找到离(x,y)最近的且z-index最大一个元素,模拟这个dom元素的点击

https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/initMouseEvent

其中,

initMouseEvent 方法用于初始化通过 DocumentEvent 接口创建的 MouseEvent 的值。此方法只能在通过dispatchEvent 方法指派 MouseEvent 之前调用,尽管在该阶段可以多次调用它(如有必要)。如果被多次调用,则最后一次调用优先。

参数:

document.createEvent用于创建事件,在DOM Level 2 的事件中就有HTMLEvents,MouseEvents,UIEvents事件类型。DOM Level 3增加很多事件类型,个人觉得其中最有用的是CustomEvent自定义事件。

有效的事件类型列表:

http://www.w3school.com.cn/xmldom/met_document_createevent.asp#eventType

为DOM元素创建自定义事件的步骤为:

一、创建事件:var ev = document.createEvent('CustomEvent')

二、初始化事件:ev.initCustomEvent('自定义事件名称', false(是否允许冒泡), false(是否允许中断),args)

三、为DOM添加事件监听:element.addEventListener('自定义事件名称',fn,false)

四、分发(触发)自定义事件:element.dispatchEvent(ev)