javascript对点击事件和拖动事件的区分
1.项目中,为了更好的服务用户,经常会设计一个便捷的通道,这个通道一般都是“悬浮”的。
由于是悬浮的,那么就会考虑用户会出现哪几种可能的操作,一个是直接点击,另外一种就是在屏幕上先拖动几下,然后再点击。
那么为了完美的实现这个需求,那么该怎么办呢?
最重要的就是要区分点击事件和拖动事件。
我们都知道,点击事件是被点击的对象可看做是静止不动的,而拖动事件的对象很明显是移动的。
那么思路就应该是先判断事件对象是否有移动的现象,
但是由于不管是在点击事件和拖动事件,其都有一个鼠标按下的一个过程和一个松开的过程,只不过拖动事件多了一个拖动动作。
那么完整的思路应是这样的:
第一:先写出鼠标按下的函数;
第二:编写对象是否被拖动的函数;
第三:判断对象是否相对原先位置产生了位移;
第四:编写鼠标松开之后的代码;
完整代码如下:
var timmerHandle = null; //先设置一个定时器处理;
var isDrag = false; //声明拖动的默认状态是:否
//创建目标被点击(鼠标按下)的函数
function entranceDivDown (){
console.log("mouse down.");
isDrag = false;
//延迟100ms
timmerHandle = setTimeout(setDragTrue,200);
}
function setDragTrue (){
isDrag = true;
}
//创建目标被拖动的函数
function entranceDivMove (){
//可以使用isDrag来判断是移动还是拖动
var entrance = document.getElementById("entrance");
entrance.onmousedown = function(ev){
var oevent = ev || event;
var distanceX = oevent.clientX - entrance.offsetLeft;
var distanceY = oevent.clientY - entrance.offsetTop;
document.onmousemove = function(ev){
var oevent = ev || event;
entrance.style.left = oevent.clientX - distanceX + 'px';
entrance.style.top = oevent.clientY - distanceY + 'px';
};
document.onmouseup = function(ev){
document.onmousemove = null;
document.onmouseup = null;
};
};
}
//创建目标鼠标释放的函数
function entranceDivUp (){
if (!isDrag){
//先把doMouseDownTimmer清除,不然200毫秒后setGragTrue方法还是会被调用的
clearTimeout(timmerHandle);
console.log("mouse up.");
activity_id = sessionStorage.getItem('activity_id'); //获取活动id
var url = globalConfig.pre_api_url + "/wall/index.php?activity_id=" + activity_id; //活动路径
window.open(url);
}else{
isDrag = false;
console.log("draging over.");
}
}
感谢阅读
喜欢看小编文章的点个订阅或者喜欢!小编每天都会跟大家分享文章,也会给大家提供web前端学习资料。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
HyperLedger Fabric 1.2 基础环境搭建(7)
学习了前面几章理论知识后,本章开始介绍实践操作,先介绍Fabric基础环境搭建,采用的操作系统为Centos 7 64位,依次介绍Docker安装、Docker-Compose安装、GO语言环境安装、Git安装和Fabric安装,最终完成可使用的Fabric环境。7.1 Docker安装 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。安装步骤:1. yum-utils提供yum-config-manager工具,设备映射存储驱动需要device-mapper-persistent-data和lvm2工具 # yum install -y yum-utils device-mapper-persistent-data lvm2 2. 设置稳定存储库 # yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 3. 开...
-
下一篇
JavaScript之数据类型
前言 JavaScript一共有6中数据类型: 基本数据类型(5):字符串(String)、数字(Number)、布尔(Boolean)、数组(Array)、空(Null)、未定义(Undefined) 复杂数据类型(1):对象(Object) 注意:Array、Date、Math、Error Set(ES6).....都是属于Object中 一、JS数据类型概述 1.1 简介 原始类型(基本类型):按值访问,可以操作保存在变量中实际的值。 原始类型汇总中null、undefined比较特殊。 引用类型:引用类型的值是保存在内存中的对象。 与其他语言不同的是,JavaScript不允许直接访问内存中的位置,也就是说不能直接操作 对象的内存空间。 在操作对象时,实际上是在操作对象的引用而不是实际的对象。所以引用类型的值是按引用 访问的。 1.2 typeof 操作符 由于js中的变量是松散类型的,所以它提供了一种检测当前变量的数据类型的方法,也就是typeof关键字。 关键字 值 类型 typeof 123 Number typeof 'abc' String typeof true B...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- Windows10,CentOS7,CentOS8安装Nodejs环境
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8编译安装MySQL8.0.19
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- MySQL数据库在高并发下的优化方案
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果