js实现鼠标拖拽div-------Day44

如果去问这样一个问题“你觉得鼠标操作简单,还是键盘操作简单”,相信会有多数人都会回答鼠标吧,毕竟键盘按钮那么多,如果手小了或者手法不规范了,太容易出问题了,也对操作的速度和有效性是大大的降低了,当然不可否认,会有那么一批人,操作起键盘来完全可以忽略鼠标的,但这些都应该是骨灰级别的了吧,起码我现在的层次还接触不到,只能向往。

然而,当面对这么一个问题时,我突然有点纠结,因为毕竟以前我也是那么想的,但是这次开发让我是大跌眼镜,键盘操作我在开发中,我只能判定其按键是否按键,然后根据不同按键进行不同响应,而到了鼠标这里的时候,虽然就那三个键,甚至有的两个(普通的鼠标,高端鼠标其它键不算),对应的事件却是绝对不少,左键、右键、长按、双击,滚轮等等等等,那哪个简单啊,原来都不简单。

先让我们来记录下鼠标的这个应用--拖拽,它的实现结构应该有哪些呢:

1、拖拽效果的监听,这里表现出来的是左键长按并拖动鼠标;

2、拖拽结束后,鼠标按键弹起的监听,改变原始div的位置;

3、当然如果有个显示过程效果的话,最好div能够随时跟随着鼠标;

这样我们还是先附上代码:

html部分:

<div style="width: 50px;height: 50px;background-color: cyan;position: absolute;" id="showZone">

然后是javascript:

var zIndex=1;
	//获取要移动的div对象
window.onload=function(){
	var obj=document.getElementById("showZone");
	var disX=disY=0;
	obj.onmousedown=function(event){
		var event=event||window.event;
		disX=event.clientX-this.offsetLeft;
		disY=event.clientY-this.offsetTop;
		var move=document.createElement("div");//这个暂时有点小瑕疵,不知道哪的问题,发现后会立马改正
		move["id"]="road";
		move.style.left=this.currentStyle?this.currentStyle["left"]:getComputedStyle(this,null)["left"];
		move.style.top=this.currentStyle?this.currentStyle["top"]:getComputedStyle(this,null)["top"];
		move.style.zIndex=zIndex++;
		document.body.appendChild(move);
		document.onmousemove=function(event){//监听鼠标拖动
			var event=event||window.event;
			var nowLeft=event.clientX-disX;//这个地方是个关键,之前的disX在这里才明白是做什么用的,相对位置的活用啊
			var nowTop=event.clientY-disY;
			var maxL=document.documentElement.clientWidth-obj.offsetWidth;
			var maxT=document.documentElement.clientHeight-obj.offsetHeight;
			nowLeft<=0&&(nowLeft=0);//判断脱界了啊,不过这样写真的可以么
			nowTop<=0&&(nowTop=0);
			nowLeft>=maxL&&(nowLeft=maxL);
			nowTop>=maxT&&(nowTop=maxT);
			document.getElementById("showZone").innerHTML=nowLeft;
			move.style.left=nowLeft+"px";
			move.style.top=nowTop+"px";
			return false;
		};
		document.onmouseup=function(){//监听鼠标弹起
			document.onmousemove=null;
			document.onmouseup=null;
			obj.style.left=move.style.left;
			obj.style.top=move.style.top;
			obj.style.zIndex=move.style.zIndex;
			document.body.removeChild(move);
			obj.releaseCapture&&obj.releaseCapture();
		};
		this.setCapture&&this.setCapture();
		return false;
	};
};

这样来分析下里面的几个关键点:

1、clientX

前面我们应用了styl e.left;offsetLeft,这里又出来这么一个clientX,它的意义是鼠标相对于document的距离啊,果断记忆啊。

2、currentStyle和getComputedStyle

其实这也算是浏览器间的差异,跟event一样,ie不具有getComputedStyle的方法,但是每个有style属性的元素都有currentStyle的属性,意义几乎是一样的,而getComputedStyle()有两个参数,第一个是需要计算样式的元素,后面一个则是伪元素,如果没有伪操作的话可以为空,伪元素啊,这个还没学到呢,不过这里倒没有用到,后面碰到研究吧

3、document.documentElement.clientWidth

这个暂时先记住是整个文档的宽度吧

这个功能暂时还有些瑕疵,不过大体功能实现了,想放松下,回头发现问题症结了再改动吧。

今天是个周六,陪媳妇看“爸爸去哪儿”,果然还是被萌化了..

js实现鼠标拖拽div-------Day44,布布扣,bubuko.com

时间: 2024-10-19 23:25:29

js实现鼠标拖拽div-------Day44的相关文章

JS Event 鼠标拖拽事件

<!DOCTYPE html><html> <head>        <meta charset="UTF-8">        <title>JS Event鼠标拖拽事件</title>                <style>            #box{width:200px;height:200px;background:#000;position:absolute;}       

js实现鼠标拖拽多选功能

最近做了一个用js实现鼠标拖拽多选的功能,于是整理了一下思路,写了一个小demo:遮罩出现:被遮罩盖住的,即为选中的块(背景色为粉色)下面是具体代码,注释已在文中,与大家交流. <!DOCTYPE html> <html> <head> <title>鼠标拖拽多选功能</title> <script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js">

JS实现鼠标拖拽效果以及放大缩小

要求:拖拽的子元素不能走出父元素,大小不能超过父元素,放大/缩小时阻止冒泡事件 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> *{margin: 0;padding: 0;} .box1{border: 10px solid #000;width: 400px;height: 400px;posi

JS原生---鼠标拖拽

<!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 runat="server">      &l

js - 面向对象 - 小案例:轮播图、随机点名、选项卡、鼠标拖拽

面向对象 对象 : (黑盒子)不了解内部结构, 知道表面的各种操作. 面向对象 : 不了解原理的情况下 会使用功能 . 面向对象是一种通用思想,并非编程中能用,任何事情都能用. 编程语言的面向对象的特点: ? 封装 : 看不到里面的东西 , 用好表面功能. ? 继承 : 从父类继承一些方法 , 属性 , 子类又有一些新的特性. ? 多态 ? 抽象 : 抽取一个功能里面多个核心的功能模块. ? 思想: 高内聚.低耦合 ? 低耦合 :每个功能模块之间耦合度要低 ? 高内聚 :模块内部要紧密相连 面向

js可以随意拖拽的div的实现

最近花了点时间用纯JS写了一个扫雷程序,写出来效果很差,自己长时间使用面向过程的方式编写代码,写的程序到后面都乱了,有必要找时间好好的深入理解一下OOP了.有时间会把写的东西拿上来.就当是留个纪念吧.打算用OOP重新写个扫雷程序,希望令自己满意. ——————————————碎碎念 记录一个实现随意拖拽div的实现方法,当作备忘吧,指不定什么时候用到了呢. <!DOCTYPE html> <html lang="en"> <head> <met

php+mysql+js拖拽div实例

php+mysql+js拖拽div实例 代码已改好,放在目录下可直接使用.适合新手学习! 效果如下图,比较适合做可以移动,拖拽的留言板. 实现思路: 思路也是很简单了,就是js获取定位后的数据,然后请求给PHP,php将定位的横向坐标和纵向坐标存到数据库! 代码实例下载地址:http://download.csdn.net/detail/u011986449/8099045

一款基于jQuery的支持鼠标拖拽滑动焦点图

记得之前我们分享过一款jQuery全屏广告图片焦点图,图片切换效果还不错.今天我们要分享另外一款jQuery焦点图插件,它的特点是支持鼠标拖拽滑动,所以在移动设备上使用更加方便,你只要用手指滑动屏幕即可切换图片. 在线预览   源码下载 实现的代码. html代码: <div class="main_visual"> <div class="flicking_con"> <a class="on" href=&quo

简洁的drag效果,自由拖拽div的实现及注意点

偶然间看到了以前做的一个简洁的div拖拽效果,修改了一下加点注释,经测试完美通过firefox/chrome/ie6-11,现拿来分享一下. 先说一下实现原理及要点,最主要的有三步.第一步是mousedown事件,鼠标mousedown的时候记录此时的鼠标X轴和Y轴以及拖拽框的left和top,并且给拖拽标记赋值true,代表拖拽动作就绪.第二步是mousemove事件,此时动态获取鼠标的X轴和Y轴,然后计算出来拖拽框新的left和top并赋值使其实现拖拽效果.第三步是mouseup事件,鼠标弹