jQuery手机浏览器中拖拽动作的艰难性分析


Posted in Javascript onFebruary 04, 2015

本文实例分析了jQuery手机浏览器中拖拽动作的艰难性。分享给大家供大家参考。具体如下:

本想在手机网页中实现一个如iphone可以随意拖动的控制按钮的,但是最后发现竹篮打水一场空,

虽然拖拽动作在手机浏览器中司空见惯,但是在手机浏览器中,要想实现可以被拖拽的组件,却是一件不可能的事情。

先来看看在PC网页中,拖拽动作是怎么做的,

首先,我们有一个按钮,点击有动作,一直按着不放,可以随意拖动,就像iphone可以随意拖动的控制按钮一样,

jQuery手机浏览器中拖拽动作的艰难性分析

如上图的灰色图层,写出来也不甚容易,

首先,要把灰色图层的position属性变为abosulte,之后在jquery脚本要实现的工作要点,是区分click与mousedown+mouseup这一对动作,因为click本来就等于mousedown+mouseup,但是还好,mousedown一段时间时候,马上unbind清空图层对cilck动作的绑定,告诉系统,mousedown之后的动作与click无关,见如下现实代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  

<html xmlns="http://www.w3.org/1999/xhtml">  

<head>  

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  

<title>jqdrag</title>  

<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">  

<script type="text/javascript" src="js/jquery-1.11.1.js"></script>  

</head>  

  

<body>  

<div id="mydiv" style="width:100px; height:100px; background:#999; position:absolute;">out</div>  

</body>  

</html>  

<script type="text/javascript">  

$(document).ready(function() {  

var timeout ;  

      

    $("#mydiv").mousedown(function(e) {  

        /*相当于mousedown之后立即进行判断,到底用户有没有按下超过1秒,有则判定为长按*/  

        $("#mydiv").click(function() {  

            $("#mydiv").text("被点击");  

        });  

        timeout = setTimeout(function() {  

            $("#mydiv").text("长按");  

            /*以下的语句之后,用户鼠标左键放起,则不会判定为click动作*/  

            $("#mydiv").unbind("click");  

            $("#mydiv").mousemove(function (e) {  

                /*这里是为了鼠标拖拽图层移动的时候,鼠标刚好在图层中间*/  

                document .getElementById("mydiv").style.left = e.pageX-50 + "px";  

                document .getElementById("mydiv").style.top = e.pageY-50 + "px";  

            });   

        }, 1000)          

    });  

          

    $("#mydiv").mouseup(function() {  

        clearTimeout(timeout);  

        /*这里必须清空mousemove动作,否则图层会永远绑定mousemove动作,随着鼠标移动而移动*/  

        $("#mydiv").unbind("mousemove");  

        $("#mydiv").text("out");      

    });   

          

    $("#mydiv").mouseout(function() {  

        clearTimeout(timeout);  

        $("#mydiv").unbind("mousemove");  

        $("#mydiv").text("out");  

    });  

});  

</script>

之所以还要编写mouseout事件,与之前的【jQuery实现长按按钮触发事件的方法】一文一样,防止浏览器中,涂黑躲过mouseup判定的bug。
以上看起来非常地完美,因为在PC各大浏览器测试通过,还完美兼容IE8,实在是美如画,

但是,一到手机中就问题大了,

仅仅在google浏览器中手机调试模式中,还没有到真机上了,就无法使用了!

jquery的点击事件在手机浏览器中是没有任何问题的,但是,长按事件却与手机上系统自带的右键功能发生了冲突,即使换成jquery mobile中的.on("taphold",function (){});事件或者是在上面的mousedown中加入e.preventDefault();IE则用window.event.preventDefault();I禁用手机浏览器的自带的菜单,也只能使长按的功能留存,拖拽是不用想了,因为拖拽最主要的函数就是mousemove动作,手机浏览器上根本就不支持mousemove()动作。

于是,有人提出抗议了,可以用jquery ui中的.draggable()与jquerymobile中的swipe事件,实在html5中的拖拽事件啊!

然而,上述所有的解决方案都是徒劳无功,

对于jquery ui中的.draggable(),jquerymobile中的swipe事件,html5中的拖拽事件可以用浏览器的手机调试模式,发现根本就没法拖。

希望本文所述对大家的jquery程序设计有所帮助。

Javascript 相关文章推荐
jQuery 常见开发使用技巧总结
Dec 26 Javascript
JS 显示当前日期与时间的代码
Mar 24 Javascript
jquery 与NVelocity 产生冲突的解决方法
Jun 13 Javascript
JQuery入门——事件切换之hover()方法应用介绍
Feb 05 Javascript
jQuery操作Select选择的Text和Value(获取/设置/添加/删除)
Mar 06 Javascript
javascript 实现键盘上下左右功能的小例子
Sep 15 Javascript
JavaScript中的Math 使用介绍
Apr 21 Javascript
分享纯手写漂亮的表单验证
Nov 19 Javascript
jQuery实现两个select控件的互移操作
Dec 22 Javascript
jQuery实现拖动剪裁图片作为头像
Dec 28 Javascript
JavaScript复制内容到剪贴板的两种常用方法
Feb 27 Javascript
vue实现锚点定位功能
Jun 29 Vue.js
JavaScript检测实例属性, 原型属性
Feb 04 #Javascript
Jquery Ajax xmlhttp请求成功问题
Feb 04 #Javascript
js对字符的验证方法汇总
Feb 04 #Javascript
AngularJS内置指令
Feb 04 #Javascript
javascript内置对象操作详解
Feb 04 #Javascript
js判断文本框剩余可输入字数的方法
Feb 04 #Javascript
javascript 兼容各个浏览器的事件
Feb 04 #Javascript
You might like
一个简单的自动发送邮件系统(一)
2006/10/09 PHP
PHP的autoload机制的实现解析
2012/09/15 PHP
php定时删除文件夹下文件(清理缓存文件)
2013/01/23 PHP
PHP将HTML转换成文本的实现代码
2015/01/21 PHP
php写入文件不覆盖的实例讲解
2019/09/17 PHP
ie下动态加态js文件的方法
2011/09/13 Javascript
JS操作Cookies包括(读取添加与删除)
2012/12/26 Javascript
基于JQuery实现的Select级联
2014/01/27 Javascript
javascript中CheckBox全选终极方案
2015/05/20 Javascript
jQuery原生的动画效果
2015/07/10 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
2016/09/04 Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
2017/04/13 Javascript
详解Layer弹出层样式
2017/08/21 Javascript
Vuex入门到上手教程
2018/06/20 Javascript
React Router V4使用指南(精讲)
2018/09/17 Javascript
node.js express框架实现文件上传与下载功能实例详解
2019/10/15 Javascript
微信小程序自定义模态弹窗组件详解
2019/12/24 Javascript
如何在vue中使用kindeditor富文本编辑器
2020/12/19 Vue.js
[49:35]LGD vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
[45:32]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
python实现图书借阅系统
2019/02/20 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
2020/02/18 Python
Python 多进程原理及实现
2020/12/21 Python
python 指定源路径来解决import问题的操作
2021/03/04 Python
加拿大鞋子连锁店:Town Shoes
2016/09/26 全球购物
日本航空官方网站:JAL
2019/06/19 全球购物
我的applet原先好好的, 一放到web server就会有问题,为什么?
2016/05/10 面试题
公务员职业生涯规划书范文  
2014/01/19 职场文书
房务中心文员岗位职责
2014/04/16 职场文书
女生节标语
2014/06/26 职场文书
重阳节标语大全
2014/10/07 职场文书
技术负责人岗位职责
2015/02/10 职场文书
Python字符串格式化方式
2022/04/07 Python
Three.js实现雪糕地球的使用示例详解
2022/07/07 Javascript