手机浏览器中屏蔽img的系统右键菜单context menu

    我们知道通过oncontextmenu事件可以屏蔽浏览器右键菜单

$('img').on("contextmenu",function(E){E.preventDefault();E.stopPropagation();E.returnValue=false; return false;})

    可是这一招在移动设备的浏览器中却失灵了,移动设备的浏览器的contextmenu是通过长按事件触发的,我想正是因为这和原因造成的上述手段失灵。

    经调试发现,屏蔽touchstart事件可以解决:

 $('img').on("touchstart",function(E){E.preventDefault();E.stopPropagation();});

  但是,按下葫芦浮起瓢,上述代码屏蔽了系统邮件菜单的同时也造成longTap事件也不触发了,这直接导致自己的context menu也出不来了!没办法只能自己想办法解决了!以下代码基于app framework 实现了屏蔽手机浏览器的contextmenu、拖拽控件移动、并在长按时能够显示自己的contextmenu(af中的actionsheet):

var tapTimer=null;
                        $('img').on("touchstart",function(E){
                            E.preventDefault();E.stopPropagation();
                            
                            var el=this;var me=$(this);$("#tip").text("in touchstart");
                            var t=E.touches[0];
                            tapTimer=setTimeout(function(){me.trigger('touchend').trigger('longTap');},1500);
                          
                                    me.data("mx",t.pageX);me.data("my",t.pageY);
                                    me.data("ex",el.offsetLeft);me.data("ey",el.offsetTop);

                        })
                        .on('touchmove',function(E){E.preventDefault();E.stopPropagation();
                            if(tapTimer!=null)clearTimeout(tapTimer);
                       var t=E.touches[0];
                            var mx=parseInt(me.data("mx")),my=parseInt(me.data("my"));
                            var ex=parseInt(me.data("ex")),ey=parseInt(me.data("ey"));
                            var nx=ex+t.pageX - mx , ny=ey+t.pageY-my
                           $("#tip").text("in touch move : "+"or mx,my, new mx,my or ex,ey="+mx+","+my+","+t.pageX+","+t.pageY+","+ex+","+ey+" dest x,y="+nx+","+ny);
                            me.css({"left":nx+"px","top":ny+"px"}) ;

                        })
                        .on('touchend',function(E){
                            if(tapTimer!=null)clearTimeout(tapTimer);
                            //E.preventDefault();E.stopPropagation();
                        });
                       
                        $('img').on("contextmenu",function(E){E.preventDefault();E.stopPropagation();E.returnValue=false; return false;})
                                .on('longTap',function(E){E.stopPropagation();E.preventDefault()
                            $.ui.actionsheet(
                            [{
                                text: 'back',
                                cssClasses: 'red',
                                handler: function () {
                                    alert("Clicked Back")
                                }
                            }, {
                                text: 'Alert Hi',
                                cssClasses: 'blue',
                                handler: function () {
                                    alert("Hi");
                                }
                            }, {
                                text: 'Alert Goodbye',
                                cssClasses: '',
                                handler: function () {
                                    alert("Goodbye");
                                }
                            }]
                        );
                        });

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值