js完美拖拽封装及其案例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<title></title>
		<style type="text/css">
			#box{
				width: 300px;
				height: 300px;
				background: gray;
				position: absolute;
				left: 0;
				top: 0;
			}
			#header{
				width: 100%;
				height: 50px;
				background: black;
				position: absolute;
				left: 0;
				top: 0;
			}
			#header span{
				width: 50px;
				height: 50px;
				background: yellow;
				color: black;
				position: absolute;
				right: 0;
			}
		</style>
	</head>
	<body>
		<div id="box">
			<div id="header">
				<span>B</span>
			</div>
		</div>
		<script type="text/javascript">
			var oDiv = document.getElementById("box");
			var oSpan = document.querySelector(‘#header span‘);
			var arr = [];
			oDiv.onmousedown = function(evt){
				//获取事件对象的兼容
				var e = evt || window.event;
				//获取事件源的兼容
				var target = e.target || e.srcElement;
				//事件委托
				if(target.id == ‘header‘){
					//鼠标相对于事件源元素的x、y坐标
					var disX = e.offsetX;
					var disY = e.offsetY;
					//#box初始位置
					arr.push({"left" : oDiv.offsetLeft,"top" : oDiv.offsetTop});
					//鼠标移动事件
					document.onmousemove = function(evt){
						var e = evt || window.event;
						var oHtml = document.documentElement;
						var left = e.pageX - disX;
						var top = e.pageY - disY;
						//控制#box不脱离浏览器边框
						if(left <= 0){
							left = 0
						}else if(left >= oHtml.clientWidth - oDiv.offsetWidth){
							left = oHtml.clientWidth - oDiv.offsetWidth
						}
						if(top <= 0){
							top = 0;
						}else if(top >= oHtml.clientHeight - oDiv.offsetHeight){
							top = oHtml.clientHeight - oDiv.offsetHeight;
						}
						oDiv.style.left = left + ‘px‘;
						oDiv.style.top = top + ‘px‘;
						//随时记录#box坐标,用于原路返回
						arr.push({"left" : oDiv.offsetLeft,"top" : oDiv.offsetTop});
					}
					//鼠标松开事件
					document.onmouseup = function(){
						document.onmousemove = null;
					}
					//禁止鼠标拖动
					document.ondragstart = function(){
						return false;
					}
				}
			}
			//span元素新增监听事件,将#box原路返回
			oSpan.addEventListener("click",function(){
				var index = arr.length - 1;
				var timer = setInterval(function(){
					if(index == -1){
						clearInterval(timer);
						arr = [];
					}else{
						oDiv.style.left = arr[index].left + ‘px‘;
						oDiv.style.top = arr[index].top + ‘px‘;
						index --;
 					}
				},20)
			},false);
		</script>
	</body>
</html>

原文地址:https://www.cnblogs.com/xiaohualu/p/9828771.html

时间: 2024-10-29 10:12:44

js完美拖拽封装及其案例的相关文章

JS完美拖拽

<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> *{ margin: 0; padding: 0; } #box{ height: 100px; width: 100px; background:red; position: absolute; cu

拖拽系列二、利用JS面向对象OOP思想实现拖拽封装

接着上一篇拖拽系列一.JavaScript实现简单的拖拽效果这一篇博客将接着对上一节实现代码利用JS面向对象(OOP)思维对上一节代码进行封装; 使其模块化.避免全局函数污染.方便后期维护和调用:写到这里突然想起一句话“没有任何一个题目是彻底完成的.总还会有很多事情可做......” 我想这句话程序开发大概也适用吧,前端开发人员总是可以结合自己之前学到“拖拽”相关知识,不断扩展.完善.无穷无尽.......     利用匿名函数自执行实现封装 ;(function(){ //do somethi

完美拖拽及回放

2019-08-09 21:54:40 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>完美拖拽</title> <style type="text/css"> html, body { overflow: hidden; } body, div, h2, p { margin: 0; padding: 0; }

jquery.dragsort.js 实现拖拽过程遇到的问题

1.在IE下第一次拖动的时候,被拖动的li元素会不显示,查了很多资料发现是因为在IE中定位出了问题,li标签还在,只是位置计算出错.解决的办法是在li的css样式中position设置为relative.这个问题在火狐等其他浏览器是不存在的. 2.如果拖动的li所在容器出现了滚动条,当滚动条滑到最下面的时候,拖拽下面的li的浮动层位置会出现偏移.解决的办法是在jquery.dragsort.js中,this.draggedItem.css({ top: top, left: left });这句

完美拖拽 &amp;&amp;仿腾讯微博效果&amp;&amp; 自定义多级右键菜单

<!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> <meta http-equiv="Content-

gridster.js–可拖拽的网格插件

gridster.js–可拖拽的网格插件 gridster.js 是一个 jQuery 插件用来构建直观的可拖放的布局,支持多列布局,你还可以动态的添加和删除表格中的元素. \ 主要特性 1.只依赖jQuery 2.支持元素的添加和删除 3.文档比较全 4.拥有测试用例,你可以查看你的浏览器的测试结果 5.比较适合开发益智游戏 如何使用 引入类库,包括jQuery和gridster.js: <script src="http://ajax.googleapis.com/ajax/libs/

用js实现拖拽功能

平常我们在网上可以看到,按住一张图片,然后拖到另一处去,前天在网上看石川(Blue)老师 的js课堂,有见过这个,写下来与大家分享一下: 1,先画个div小红块,样式设置如下: #div1{width: 200px; height: 200px; background-color: red; position:absolute;} 这里的positon属性很重要,如果没有这个,根本拖不动你可以试一下. 2,然后需要用到三个事件,onmousedown, onmousemove, onmouseu

JS实现拖拽小案例

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>简单的拖拽</title> <link rel="stylesheet" href="../toolkit/reset.min.css"> <style> #box{ height: 200px

js 利用jquery.gridly.js实现拖拽并且排序

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src='javascripts/jquery.js' type='text/javascript'></script> <script src='javascripts/jqu