单纯使用js或者jq如何实现 手机web的长按事件 和按键事件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单纯使用js或者jq如何实现 手机web的长按事件 和按键事件相关的知识,希望对你有一定的参考价值。

一个<li></li> 它有两个事件,当长按超过2秒后执行funtion b;单单点击他的时候 执行funtion a
如何做?
单纯的长按的,我会写,但是,两个都在一起的,长按完了 他会执行长按的事件,但是那个单击的时候也会执行,怎么解决?

var timeout = undefined;
var obj = document.getElementsByClassName('touch');
for (var i = 0; i < obj.length; i++)
obj[i].addEventListener('touchstart', function(event)
timeout = setTimeout(function()
var type = $(obj[i]).find('.AtFlag_s').val();
var info = "";
if (type == "0")
info = "您确定取消关注?"
else
info = "您即将关注该班级!";

AppDaliog.confirm(info, "", function()

update_Attention(obj[i]);
);
, 1500);

, false);
obj[i].addEventListener('touchend', function(event) //
clearTimeout(timeout);
, false);

上面代码是长按的代码,单击的就不写了 直接onclick的

参考技术A $(function()
var obj = document.getElementsByClassName('touch');
for (var i = 0; i < obj.length; i++)
obj[i].addEventListener('touchstart', function(event)
var i = 0;
var _this = $(this);
timer = setInterval(function()
i+=10;
if(i >= 1000)
i = 0;
lognPress();
else
//这里写onclick要执行的事件

,10)

);
obj[i].addEventListener('touchend', function(event)
clearTimeout(timer);
, false);

)
var time = 0;
function lognPress()
var type = $(obj[i]).find('.AtFlag_s').val();
var info = "";
if (type == "0")
info = "您确定取消关注?"
else
info = "您即将关注该班级!";

AppDaliog.confirm(info, "", function()
update_Attention(obj[i]);
);
追问

来晚了,我试了一下,发现是点击了就直接执行onclick的事件了,没有长按的,
我看了一下,发现这个代码逻辑有些问题啊,变量i,初始值0,每10秒变一次...那每次touchstar i都是为10的,也就是说不会去到i>=1000的

本回答被提问者和网友采纳

按钮上的长按事件[重复]

【中文标题】按钮上的长按事件[重复]【英文标题】:Long press event on button [duplicate] 【发布时间】:2013-01-18 06:28:51 【问题描述】:

可能重复:How to detect tap on Uitableview cell with uiview and uibutton?UIButton Long Press Event

我正在通过表格自定义单元格加载按钮。如何识别用户是单击按钮还是长按按钮?

【问题讨论】:

你可以使用LongpressGestureRecognizer... 【参考方案1】:

我只是谷歌它,我从堆栈溢出This得到了最佳答案

- (void)viewDidLoad

    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
    [self.button addGestureRecognizer:longPress];
    [longPress release];

 [super viewDidLoad];



和事件:-

- (void)longPress:(UILongPressGestureRecognizer*)gesture 
    if ( gesture.state == UIGestureRecognizerStateEnded ) 
         NSLog(@"Long Press");
    

【讨论】:

我的问题是自定义单元格中没有 viewDidLoad 仅在 Viewdidload 中添加此方法是不必要的。在您的自定义单元格中,您只需在您的自定义单元格代码中添加上面的代码,当您在 cellForRowAtindex 等中添加按钮时 分享你的代码我会编辑它 嗨 Nitin,我认为这是重复的问题,您应该将其标记为重复而不是给出答案。 它是*** Bro的新用户,我还提到了这个答案的链接,我只是在他们的代码中使用了方法:)'【参考方案2】:

您可以从创建 UILongPressGestureRecognizer 实例并将其附加到按钮开始。

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
[self.button addGestureRecognizer:longPress];
[longPress release];

然后实现处理手势的方法

- (void)longPress:(UILongPressGestureRecognizer*)gesture 
    if ( gesture.state == UIGestureRecognizerStateEnded ) 
         NSLog(@"Long Press");
    

现在这将是基本方法。您还可以设置压力机的最短持续时间以及可以容忍的错误量。另请注意,如果您在识别手势后调用该方法几次,因此如果您想在结束时执行某些操作,则必须检查其状态并进行处理。

Reference

【讨论】:

【参考方案3】:
- (void)setLongTouchAction:(SEL)newValue

    if (newValue == NULL)
    
        [self removeGestureRecognizer:longPressGestureRecognizer];
        [longPressGestureRecognizer release];
        longPressGestureRecognizer = nil;
    
    else
    
        [longPressGestureRecognizer release];
        longPressGestureRecognizer = nil;

        longPressGestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:[[self allTargets] anyObject] action:newValue];
        [self addGestureRecognizer:longPressGestureRecognizer];
    



[undoButton addTarget:self action:@selector(performUndo:) forControlEvents:UIControlEventTouchUpInside];
[undoButton setLongTouchAction:@selector(showUndoOptions:)];

【讨论】:

以上是关于单纯使用js或者jq如何实现 手机web的长按事件 和按键事件的主要内容,如果未能解决你的问题,请参考以下文章

JS 监听键盘上某个键的长按事件。

Vue 移动端的长按与触摸事件

在Ext JS中捕获网格行的长按或点击保持事件

H5实现按钮的长按事件

Vue 移动端的长按与触摸事件

Js实现移动端长按事件