javascript小实例,移动端页面中的拖拽
上文说到,想将移动端的拖拽说一说,那现在趁有时间,就将这个福利文带来了,哈哈!
在我还不知道怎么做移动端的手势操作的时候,我觉得这TM实在是太难了,这是多么高深的学问啊,手势操作耶,上滑下滑左滑右滑的,手机怎么知道我是怎么滑的,我要怎么告诉手机,我用手滑了一下,于是我就默默的找资料看看,
到底是什么样的原理可以实现这一点,于是,我找到了移动端手势操作原生事件:
touchstart: //手指放到屏幕上时触发
touchmove: //手指在屏幕上滑动式触发
touchend: //手指离开屏幕时触发
touchcancel: //系统取消touch事件的时候触发,这个好像比较少用
每个触摸事件被触发后,会生成一个event对象,event对象里额外包括以下三个触摸列表:
touches: //当前屏幕上所有手指的列表
targetTouches: //当前dom元素上手指的列表,尽量使用这个代替touches
changedTouches: //涉及当前事件的手指的列表,尽量使用这个代替touches
看到他们,我简直心生喜悦啊,简直了,这不就是我苦苦寻觅的东西吗?手机再也不用担心我的手指在干什么了!
有了上面的这些原始事件,我们能做什么事情呢?
1、通过touches,我们可以知道屏幕上有几根手指,那就可以自定义一根手指做什么,两根手指做什么,三根手指又做什么;
2、我们可以通过手指在屏幕接触的时间,来自定义轻触,模拟点击,长按,双击等等效果,当然这就比较高级了;
3、可以自定义上滑下滑左滑右滑等手势效果;
4、可以模拟滚动条效果;
5、可以实现手指拖拽效果;
。。。。。。
等等,可以实现很多你想要实现的效果,只要你敢想,当然今天要讲解的并不是移动端手势操作这么大的话题,今天就从手指拖拽效果这一个小点开始,以后慢慢介绍移动端的那些事。
回归正题,上回我们将了一下PC端的拖拽效果,不熟悉的同学可以看这里查看,移动端的拖拽思想跟pc端很像,区别只是写法不一样,具体的实现原理我就不说了,不理解的请看PC端的介绍,PC端没有用到绑定事件,其实也是可以用绑定事件来绑定的,
移动端需要用绑定事件来触发,具体代码如下:
/*
参数说明:
元素绝对定位,父级相对定位,如果父级为window,则可以不用
传一个参数,表示父级为window,物体相对于window范围拖动
传2个参数,则父级为第二个参数,物体相对于父级范围拖动
参数为id值
*/
function drag(obj,parentNode){
var obj = document.getElementById(obj);
if(arguments.length == 1){
var parentNode = window.self;
var pWidth = parentNode.innerWidth,pHeight = parentNode.innerHeight;
}else{
var parentNode = document.getElementById(parentNode);
var pWidth = parentNode.clientWidth,pHeight = parentNode.clientHeight;
}
obj.addEventListener('touchstart',function(event){
//当只有一个手指时 .
if(event.touches.length == 1){
//禁止浏览器默认事
event.preventDefault();
};
var touch = event.targetTouches[0];
var disX = touch.clientX - obj.offsetLeft,disY = touch.clientY - obj.offsetTop;
var oWidth = obj.offsetWidth,oHeight = obj.offsetHeight; obj.addEventListener('touchmove',function(event){
var touch = event.targetTouches[0];
obj.style.left = touch.clientX - disX + 'px';
obj.style.top = touch.clientY - disY + 'px';
//左侧
if(obj.offsetLeft <=0){
obj.style.left = 0;
};
//右侧
if(obj.offsetLeft >= pWidth -oWidth){
obj.style.left = pWidth - oWidth + 'px';
};
//上面
if(obj.offsetTop <= 0){
obj.style.top = 0;
};
//下面
if(obj.offsetTop >= pHeight - oHeight){
obj.style.top = pHeight - oHeight + 'px';
};
});
obj.addEventListener('touchend',function(event){
obj.removeEventListener('touchmove');
obj.removeEventListener('touchend');
})
});
}
这里我也设置了2个参数,如果只填一个参数,表示相对父级为window,物体在window内拖动,如果填2个参数,第一个参数为拖拽对象,第二个参数为相对父级,跟pc差不多,有点不同的是,pc鼠标移动和弹起时,我们作用的对象是document,是为什么防止鼠标拖动物体外面所带来的bug,现在是作用于obj对象上,这是为什么呢?
原因是在移动端上,如果有一个拖拽对象相对于window,一个拖拽对象相对于自己的相对父级,现在我们是绑定事件,如果拖动后面这个拖拽对象,因为2个都是执行的,我们把拖拽事件绑定到window,就会一起触发前面的拖拽,如果是绑定在拖拽物体上就可以避免
事件的污染问题,因为都在自身嘛!
我相信实现拖拽的方法不只这个,还有很多的方法可以实现,我也相信我写的这个代码并不是最优的,只能说可以用用,所以,如果哪位大神有更好的实现方法,或者是代码有什么错误的地方,万望指正!不胜感谢!
才疏学浅,先就到这里!后续有时间,我们在一起聊一聊移动端前端的那些事!哈哈~
javascript小实例,移动端页面中的拖拽的更多相关文章
- javascript小实例,在页面中输出当前客户端时间
时间对象(Date())比较简单,本文旨在为初学者入门使用,大牛可略过! 本文承接基础知识实例,说一下实例的要求: 在页面中输出当前客户端时间(2015年1月1日星期一10:10:10这样的格式),每 ...
- javascript小实例,PC网页里的拖拽
几年前,我参与设计开发一个房产网的项目,我负责前端工作,由于项目经理要求比较高,参考了很多房产类网站比较优秀的功能,想把别人比较优秀的设计和想法集合到一起,那时的设计稿和功能实现,简直就是改了又改,今 ...
- javascript小实例,PC网页里的拖拽(转)
这是现在的效果,可能改了一些,原来的效果是,里面的这张图是可以上下左右拖动的,然后房子上面的显示的楼栋号,也跟着图片一起移动,当时js能力还不行,未能实现项目经理的要求,不过后来项目经理又把这个效果推 ...
- JavaScript小实例:拖拽应用(二)
经常在网站别人的网站的注册页中看到一个拖拽验证的效果,就是它的验证码刚开始不出来,而是有一个拖拽的条,你必须将这个拖拽条拖到底,验证码才出来,说了感觉跟没说一样,你还是不理解,好吧,我给个图你看看: ...
- javascript小实例,拖拽应用(一)
前面我们将了一下拖拽的基本思想,理论是有了,那实践呢,可以运用到什么地方呢?下面就给大家带来一个用拖拽思想写的一个小实例,供大家参考,大致效果看下图: 就是这样一个简单的一个拖拽条,你可以把它理解为滚 ...
- JavaScript 小实例 - 表单输入内容检测,对页面的增删改
JavaScript 小实例 - 表单输入内容检测,对页面的增删改 效果体验地址:https://xpwi.github.io/js/JavaScript01/jsForm.html 功能: 1.向页 ...
- Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作
Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作 1>. 创建一个控制台程序2>. 添加一个 ADO.NET实体数据模型,选择对应的数据库与表(Studen ...
- 练习:javascript弹出框及地址选择功能,可拖拽
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 学习笔记---Javascript事件Event、IE浏览器下的拖拽效果
学习笔记---Javascript事件Event.IE浏览器下的拖拽效果 1. 关于event常用属性有returnValue(是否允许事件处理继续进行, false为停止继续操作).srcE ...
随机推荐
- C# 自动程序 windows 无法启动 XXXX 服务 错误5 拒绝访问
遇到过两次 这样的问题了,所以记录一下 原因可能是服务所在文件的目录权限不够 解决方法: 1是查看服务对应的程序所在的目录 2是设置目录的安全权限 右击–属性–安全–添加相应的帐号,给予除完全控制外的 ...
- web专业课学习及往后方向发展
日常10点起床!!!! web主要是网页设计,目前自我方向是学习web前端开发,熟悉掌握相关的编辑应用已达到能设计出满意的网页,日后继续学习后端等 ,成为全栈工程师.
- Azure VMs
Azure VMs provide a way to move your on-premises SQL Server workloads and applications to the Cloud. ...
- Java核心技术卷一基础知识-第9章-Swing用户界面组件-读书笔记
第9章 Swing用户界面组件 本章内容: * Swing与模型-视图-控制器设计模式 * 布局管理概述 * 文本输入 * 选择组件 * 菜单 * 复杂的布局管理 * 对话框 本章将介绍构造功能更加齐 ...
- CSS3 Gradient 渐变还能这么玩
浏览器支持两种类型的渐变:线性渐变 (linear-gradient),径向渐变 (radial-gradient) 渐变在 CSS 中属于一种 Image 类型,可以结合 background-im ...
- 新年放大招:Github 私库免费了!
据<Github 嫁入豪门>这篇文章刚好半年了,那时候栈长还表示对 Github 的期待,仅仅半年,现在就已经有了巨大改变. 微软果然是豪门,嫁入半年就已经开花结果了,免费私库已全面无限制 ...
- 运行 Spring Boot 应用的 3 种方式
今天介绍 3 种运行 Spring Boot 应用的方式,看大家用过几种? 你所需具备的基础 什么是 Spring Boot? Spring Boot 核心配置文件详解 Spring Boot 开启的 ...
- JavaScript之Promise学习笔记
一直想知道Promise到底是怎么实现的,网上一搜几十篇文章,看的一脸蒙蔽.最后算是找到几个讲的真心很详细明了的.看了一份源码看了很久很久……最后找大佬问了几处看不懂的地方,大佬只看了十几分钟就看懂了 ...
- extjs 解决使用store.sync()方法更新item有时不触发后台action的问题
问题描述: extjs 解决使用store.sync()方法更新item有时不触发后台action,不出发后台action的原因是item的字段值没有变化 解决方法: item.setDirty(tr ...
- Android--通过Application传递数据
在整个Android程序中,有时需要保存某些全局的数据(如:用户信息),方便在程序的任何地方调用.在Activity之间数据传递中有一种比较使用的方式,就是全局对象,使用过J2EE的都应该知道Java ...