js拖拽效果实现
#附图一张,理解拖动原理
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>drag-demo</title>
<style type="text/css">
#one{width: 100px;height: 100px;background: #66CCCC;color:#FFFFFF;}
</style>
<script type="text/javascript">
window.onload=function(){
dragone('one');
};
// 版本一:仅仅只实现拖拽,忽略其他问题
function dragone(domName){
//获取需要拖到元素的dom对象
var dom = document.getElementById(domName);
//当这个dom元素按下的时候
dom.onmousedown=function(e){
/*
浏览器兼容性判断主要是为了兼容ie8,其他的ie7、ie6没测试,不知道
*/
e = e || window.event;
/*
设置该dom元素为绝对定位absolute
只有设置为position:absolute才能实现left(距离页面左边)和top(距离页面顶部)设置,下面有说明
*/
dom.style.position = 'absolute';
/*
e.clientX:获取鼠标按下点的位置在页面上的X(横向即水平)值
这里假如是:e.clientX=10
e.clientY:获取鼠标按下点的位置在页面上的Y(纵向即垂直)值
这里假如是:e.clientY=20
dom.offsetLeft:获取该元素距离页面左边的距离
这里假如是:dom.offsetLeft = 5
dom.offsetTop:获取该元素距离页面顶部的距离
这里假如是:dom.offsetTop = 6
这里如果不理解可以使用画图工具进行理解
diffX:即5 = 10 - 5,计算出的5就是鼠标按下的x点距离该元素内部左边的值
diffY:即14 = 20 - 6,计算出的14就是鼠标按下的y点距离该元素内部顶部的值
*/
var diffX = e.clientX-dom.offsetLeft;
var diffY = e.clientY-dom.offsetTop;
//当元素被点下并在界面上移动的时候
document.onmousemove=function(e){
e = e || window.event;//浏览器兼容
/*
dom.style.left和dom.style.top即距离页面左边、顶部的距离
即用移动后的鼠标按下x,y值-之前按下点的距离内部左边、距离顶部的值
得到的值即是移动后的元素距离页面的x,y的距离,重新赋值一下给dom元素即可
*/
dom.style.left = e.clientX-diffX+'px';//设置移动时left值
dom.style.top = e.clientY-diffY+'px';//设置移动时top值
};
//鼠标松开的时候
document.onmouseup=function(e){
//去除页面移动、松开事件
//去除后该元素下次再次被点击拖动时,这两个事件又会被绑定上的,无需担心
document.onmousemove = null;
document.onmouseup = null;
};
};
}
</script>
</head>
<body>
<div id="one">版本一</div>
</body>
</html>
js拖拽效果实现的更多相关文章
- React.js实现原生js拖拽效果及思考
一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖 ...
- js拖拽效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 再谈React.js实现原生js拖拽效果
前几天写的那个拖拽,自己留下的疑问...这次在热心博友的提示下又修正了一些小小的bug,也加了拖拽的边缘检测部分...就再聊聊拖拽吧 一.不要直接操作dom元素 react中使用了虚拟dom的概念,目 ...
- js拖拽效果的实现及原理
元素拖拽分成3个步骤:按下鼠标,移动鼠标,松开鼠标. 拖拽原理:按下拖拽元素后开始监听文档中鼠标移动事件,然后再监听鼠标松开事件:鼠标移动时,元素div要随着鼠标一起移动,需要计算元素div位移的距离 ...
- js拖拽效果的实现
1.最基础的写法 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> < ...
- js拖拽效果详细讲解
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- js div浮动层拖拽效果代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
转自<JS实现漂亮的窗口拖拽效果(可改变大小.最大化.最小化.关闭)>:http://www.jb51.net/article/73157.htm 这篇文章主要介绍了JS实现漂亮的窗口 ...
- js实现本地图片文件拖拽效果
如何拖拽图片到指定位置,具体方法如下 在从本地上传图片的时候,如果使用拖拽效果,想想应该是更加的高大上,下面直接上js代码 完整代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
随机推荐
- github的使用
1.gitbub概念 github是一个基于git的代码托管平台,付费用户可以建私人仓库,免费用户用公共仓库,但是代码公开. 2.注册账户以及创建仓库 在github官网地址:https://gith ...
- Linux文件操作的主要接口API及相关细节
操作系统API: 1.API是一些函数,这些函数是由linux系统提供支持的,由应用层程序来使用,应用层程序通过调用API来调用操作系统中的各种功能,来干活 文件操作的一般步骤: 1.在linux系统 ...
- Ioc和Ao使用扩展
一.Bean作用域 spring容器创建的时候,会将所有配置的bean对象创建出来,默认bean都是单例的.代码通过getBean()方法从容器获取指定的bean实例,容器首先会调用Bean类的无参构 ...
- dll导入导出宏定义,出现“不允许 dllimport 函数 的定义”的问题分析
建立dll项目后,在头文件中,定义API宏 #ifndef API_S_H #define API_S_H ...... #ifndef DLL_S_20160424 #define API _dec ...
- mysql中间件atlas配置使用
MySQL所在机器: 192.168.16.70(Master) 192.168.16.74(Slave) 192.168.16.72(atlas)注意:主从复制需要自行配置atlas配置使 ...
- maven webapp栽坑录
一.需求 如何将一个java web项目传给别人?放到github上.要想放到github上,就要学会git,markdown和maven.像那些jar包是不鼓励传到github上的,应该尽量把源文件 ...
- CSS Hack技术介绍及常用的Hack技巧集锦
一.什么是CSS Hack? 不同的浏览器对CSS的解析结果是不同的,因此会导致相同的CSS输出的页面效果不同,这就需要CSS Hack来解决浏览器局部的兼容性问题.而这个针对不同的浏览器写不同的CS ...
- Linux用户管理(centos)
useradd testuser; 添加用户 testuser为用户名 passwd testuser; 修改用户密码 提示两次输入密码 赋予root权限 修改 /etc/sudoers 文件,找 ...
- mvn-打jar运行包(含环境变量配置)
前沿条件 maven下载:http://maven.apache.org/download.cgi 配置环境变量 MAVEN_HOME= D:\Softwares\apache-maven-3.2.2 ...
- format not a string literal and no format arguments
今天cocos2d-x打包 android的时候报错:format not a string literal and no format arguments 报错点是:__String::create ...