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 相关文章推荐
页面中body onload 和 window.onload 冲突的问题的解决
Jul 01 Javascript
JavaScript实现页面滚动图片加载(仿lazyload效果)
Jul 22 Javascript
jQuery中使用了document和window哪些属性和方法小结
Sep 13 Javascript
JavaScript面向对象之Prototypes和继承
Jul 12 Javascript
jQuery插件实现静态HTML验证码校验
Nov 06 Javascript
jQuery DateTimePicker 日期和时间插件示例
Jan 22 Javascript
JavaScript中的E-mail 地址格式验证
Mar 28 Javascript
优雅的在React项目中使用Redux的方法
Nov 10 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
Aug 14 Javascript
layui下拉框获取下拉值(select)的例子
Sep 10 Javascript
antd 表格列宽自适应方法以及错误处理操作
Oct 27 Javascript
解决Vue+SpringBoot+Shiro跨域问题
Jun 09 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
Laravel学习教程之request validation的编写
2017/10/25 PHP
JS获取scrollHeight问题想到的标准问题
2007/05/27 Javascript
javascript判断ie浏览器6/7版本加载不同样式表的实现代码
2011/12/26 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
微信小程序 获取二维码实例详解
2017/06/23 Javascript
nodejs 图解express+supervisor+ejs的用法(推荐)
2017/09/08 NodeJs
使用vue与jquery实时监听用户输入状态的操作代码
2017/09/19 jQuery
基于AngularJs select绑定数字类型的问题
2018/10/08 Javascript
详解ES6系列之私有变量的实现
2018/11/21 Javascript
JS/HTML5游戏常用算法之追踪算法实例详解
2018/12/12 Javascript
浅谈一种让小程序支持JSX语法的新思路
2019/06/16 Javascript
vue中渲染对象中属性时显示未定义的解决
2020/07/31 Javascript
vue 如何使用递归组件
2020/10/23 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
2020/10/29 Javascript
[01:52]深扒TI7聊天轮盘语音出处7
2017/05/11 DOTA
videocapture库制作python视频高速传输程序
2013/12/23 Python
Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
2015/05/22 Python
Python制作豆瓣图片的爬虫
2017/12/28 Python
解决python写入mysql中datetime类型遇到的问题
2018/06/21 Python
对python pandas读取剪贴板内容的方法详解
2019/01/24 Python
Python程序包的构建和发布过程示例详解
2019/06/09 Python
python学生管理系统的实现
2020/04/05 Python
Django ORM filter() 的运用详解
2020/05/14 Python
英国No.1文具和办公用品在线:Euroffice
2016/09/21 全球购物
英国鹦鹉店:Parrot Essentials
2018/12/03 全球购物
中国领先的汽车保养服务平台:途虎养车
2019/10/18 全球购物
英国女性化妆品收纳和家具网站:Beautify
2019/12/07 全球购物
解释i节点在文件系统中的作用
2013/11/26 面试题
企业承诺书怎么写
2014/05/24 职场文书
大四优秀党员个人民主评议
2014/09/19 职场文书
2015年创先争优活动总结
2015/03/27 职场文书
2015年部门工作总结范文
2015/03/31 职场文书
决心书格式及范文
2019/06/24 职场文书
2019通用版劳动合同范本!
2019/07/11 职场文书
React Hook用法示例详解(6个常见hook)
2021/04/28 Javascript
Python自动化测试PO模型封装过程详解
2021/06/22 Python