zoukankan      html  css  js  c++  java
  • js--拖拽

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title></title>
    	</head>
    	<style type="text/css">
    		*{
    			margin:0;
    			padding:0;
    		}
    		#box{
    			200px;
    			height:200px;
    			background:orange;
    			position:absolute;
    			left:100px;
    			top:100px;
    			cursor:move;
    		}
    	</style>
    	<body>
    		<div id="box">啊啊啊啊啊</div>
    	</body>
    </html>
    <script>
    	/*
    	 第一步 :鼠标按下  记录鼠标相对应拖拽元素的内部偏移量
    	 var disx  = e.offsetX || e.layerX  e.offsetY
    	 或者
    	 disx = e.pageX - div.offsetLeft;  兼容性好
    	 第二步: 鼠标在按下时 移动,改变拖拽元素的left和top值  
    	 left :  e.pageX - disx
    	 top :  e.pageY - disy
    	 
    	 第三步 :鼠标抬起事件
    	 抬起鼠标时 取消移动
    	 */
    	let oDiv = document.querySelector("#box");
    	oDiv.onmousedown = function(e){
    		var e = e || event;
    		//记录内部偏移量
    		let disx = e.offsetX || e.layerX;
    		let disy = e.offsetY || e.layerY;
    		 
    		//添加鼠标移动事件 (在哪移动?)
    		document.onmousemove = function(e){
    			//移动时  取消文字被选中的状态 
    			window.getSelection().removeAllRanges();
    			var e = e||event;
    			//获取div的最大left和top值
    			var maxL = window.innerWidth - oDiv.offsetWidth;
    			var maxT = window.innerHeight - oDiv.offsetHeight;
    			
    			//设置拖拽元素div的left和top值
    			var x = e.pageX - disx;
    			var y = e.pageY - disy;
    			
    			//边界处理
    			/*if( x < 0 ){ //左边界
    				x = 0;
    			}else if( x > maxL ){ //右边界
    				x = maxL;
    			}
    			if( y < 0 ){ //上边界
    				y = 0;
    			}else if( y > maxT ){
    				y = maxT;
    			}*/
    			
    			//边界处理 
    			x = x < 0 ? 0 : ( x > maxL ? maxL : x );
    			y = y < 0 ? 0 : ( y > maxT ? maxT : y );
    			
    			oDiv.style.left = x + "px";
    			oDiv.style.top = y + "px";
    		}
    		
    		//鼠标抬起 取消移动(事件源??建议在document上)
    		document.onmouseup = function(){
    			//取消移动
    			document.onmousemove = null;
    		}
    		
    		//return false;
    	}
    	
    	//[{x :横坐标 , y :纵坐标 },{},{},{}]
    </script>
    

      

  • 相关阅读:
    Android 压力测试工具Monkey
    解决maven的依赖总是无法下载完成
    JDBC连接数据库(二)
    JDBC连接数据库(一)
    webdriver js点击无法点击的元素
    多线程Java面试题总结
    PHP unset销毁变量并释放内存
    ThinkPHP函数详解:D方法
    PHP 函数:intval()
    ThinkPHP 模板显示display和assign的用法
  • 原文地址:https://www.cnblogs.com/ccyq/p/11335647.html
Copyright © 2011-2022 走看看