`
iceman0012
  • 浏览: 11210 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

JavaScript--drag

    博客分类:
  • 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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript">
		window.onload = function(){
			var container = document.getElementById('container');
			var ele = document.getElementById('d1');
			var bodyWidth = container.offsetWidth,
				bodyHeight = container.offsetHeight;
			var maxX = bodyWidth - ele.offsetWidth - 10;
			var maxY = bodyHeight - ele.offsetHeight - 10;
			var dd = new Dragdrop({
				target : ele,
				area : [0,maxX,0,maxY],
				callback : function(obj){
					if(typeof obj.moveX == 'number' && this.dragX){
						document.getElementById('x').innerHTML = 'x:'+obj.moveX;
					}
					if(typeof obj.moveY == 'number' && this.dragY){
						document.getElementById('y').innerHTML = 'y:'+obj.moveY;	
					}
				}
			});	
			document.getElementById('setting').onclick = function(e){
				e = e || event;
				var target = e.target || e.srcElement;
				if(target.value == '1' && target.checked){
					dd.dragAll();
				}				
				if(target.value == '2' && target.checked){
					dd.dragX();
				}
				if(target.value == '3' && target.checked){
					dd.dragY();
				}
				if(target.value == '4' && target.checked){
					dd.setDragable(false);
				}
				if(target.value == '5' && target.checked){
					dd.setDragable(true);
				}
				if(target.value == '6' && target.checked){
					dd.reStore();
					document.getElementById('x').innerHTML = 'x:0';
					document.getElementById('y').innerHTML = 'y:0';
				}
			}
		}
	</script>
</head>

<body>
<div style="width:520px;height:20px;margin:10px auto;">
  		拖拽状态:<span id="x">x:0</span>, <span id="y">y:0</span>
	</div>
	
  	<div id="container" style="position:relative;border:5px solid gray;width:520px;height:300px;margin:0 auto;">
		<div id="d1" style="width:100px;height:50px;background:gold;text-align:center;position:absolute;left:0px;top:0px;">
			Drag me.
		</div>  		
	</div>
	<div id="setting" style="width:520px;margin:20px auto;">
		<input id="f1" type="radio" value="1" name="flag"/><label for="f1">任意方向</label>
		<input id="f2" type="radio" value="2" name="flag"/><label for="f2">水平方向</label>
		<input id="f3" type="radio" value="3" name="flag"/><label for="f3">垂直方向</label>
		<input id="f4" type="radio" value="4" name="flag"/><label for="f4">停止拖拽</label>
		<input id="f5" type="radio" value="5" name="flag"/><label for="f5">开启拖拽</label>
		<input id="f6" type="radio" value="6" name="flag"/><label for="f6">恢复初始状态</label>
	</div>
    <script type="text/javascript">
/**
 * 
 * 基本拖拽
 * new Dragdrop({
 * 		target 	 拖拽元素 HTMLElemnt 必选
 * 		bridge	 指定鼠标按下哪个元素时开始拖拽,实现模态对话框时用到 
 * 		dragable 是否可拖拽	(true)默认
 * 		dragX 	 true/false false水平方向不可拖拽 (true)默认
 * 		dragY	 true/false false垂直方向不可拖拽 (true)默认
 * 		area 	 [minX,maxX,minY,maxY] 指定拖拽范围 默认任意拖动
 * 		callback 移动过程中的回调函数
 * });
 * 
 * demo
 * 		dragdrop_0.6.html
 */
Dragdrop = function(window){
	var doc = window.document;
	var E = {
		on : function(el, type, fn){
			el.addEventListener ?
				el.addEventListener(type, fn, false) :
			el.attachEvent ?
				el.attachEvent("on" + type, fn) :
			el['on'+type] = fn;
		},
		un : function(el,type,fn){
			el.removeEventListener ?
				el.removeEventListener(type, fn, false) :
			el.detachEvent ?
				el.detachEvent("on" + type, fn) :
			el['on'+type] = null;
		},
		evt : function(e){
			return e || window.event;
		}
	};
	return function(opt){
		
		var conf = null, defaultConf, diffX, diffY;
		function Config(opt){
			this.target = opt.target;
			this.bridge = opt.bridge;
			this.dragable = opt.dragable != false;
			this.dragX = opt.dragX != false;
			this.dragY = opt.dragY != false;
			this.area  = opt.area;
			this.callback = opt.callback;
		}	
		function Dragdrop(opt){
			if(!opt){return;}
			conf = new Config(opt);
			defaultConf = new Config(opt);
			conf.bridge ?
				E.on(conf.bridge,'mousedown',mousedown) :
				E.on(conf.target,'mousedown',mousedown);
		}
		Dragdrop.prototype = {
			dragX : function(){
				conf.dragX = true;
				conf.dragY = false;
			},
			dragY : function(b){
				conf.dragY = true;
				conf.dragX = false;
			},
			dragAll : function(){
				conf.dragX = true;
				conf.dragY = true;
			},
			setArea : function(a){
				conf.area = a;
			},
			setBridge : function(b){
				conf.bridge = b;
			},
			setDragable : function(b){
				conf.dragable = b;
			},
			reStore : function(){
				conf = new Config(defaultConf);
				conf.target.style.top = '0px';
				conf.target.style.left = '0px';
			},
			getDragX : function(){
				return conf.dragX;
			},
			getDragY : function(){
				return conf.dragY;
			}
		}
		function mousedown(e){
			e = E.evt(e);
			var el = conf.target;
			el.style.position = 'absolute';
			el.style.cursor = 'move';
			if(el.setCapture){ //IE
				E.on(el, "losecapture", mouseup);
				el.setCapture();
				e.cancelBubble = true;
			}else if(window.captureEvents){ //标准DOM
				e.stopPropagation();
				E.on(window, "blur", mouseup);
				e.preventDefault();
			}
			diffX = e.clientX - el.offsetLeft;
			diffY = e.clientY - el.offsetTop;
			E.on(doc,'mousemove',mousemove);
			E.on(doc,'mouseup',mouseup);
		}
		function mousemove(e){
			var el = conf.target, e = E.evt(e), moveX = e.clientX - diffX, moveY = e.clientY - diffY;
			var minX, maxX, minY, maxY;
			if(conf.area){
				minX = conf.area[0];
				maxX = conf.area[1];
				minY = conf.area[2];
				maxY = conf.area[3];
				moveX < minX && (moveX = minX); // left 最小值
				moveX > maxX && (moveX = maxX); // left 最大值
				moveY < minY && (moveY = minY); // top 最小值
				moveY > maxY && (moveY = maxY); // top 最大值
			}
			if(conf.dragable){
				conf.dragX && (el.style.left = moveX + 'px');
				conf.dragY && (el.style.top =  moveY + 'px');
				if(conf.callback){
					var obj = {moveX:moveX,moveY:moveY};
					conf.callback.call(conf,obj);
				}
			}
		}
		function mouseup(e){
			var el = conf.target;
			el.style.cursor = 'default';
			E.un(doc,'mousemove',mousemove);
			E.un(doc,'mouseup',mouseup);
			if(el.releaseCapture){ //IE
				E.un(el, "losecapture", mouseup);
				el.releaseCapture();
			}
			if(window.releaseEvents){ //标准DOM
				E.un(window, "blur", mouseup);
			}
		}
		return new Dragdrop(opt);
		
	}
		
}(this);
</script>			
</body>
</html>

 

分享到:
评论

相关推荐

    vue-drag-verify_verify_dragVerify卡顿_thousandm5p_vue_silly9fx_

    在"vue-drag-verify_verify_dragVerify卡顿_thousandm5p_vue_silly9fx_"这个标题中,"dragVerify卡顿"可能是指在使用Vue Drag Verify组件时遇到了性能问题,可能是由于大量元素渲染或拖动操作不流畅导致的。...

    wxa-comp-canvas-drag-master.zip

    总的来说,"wxa-comp-canvas-drag-master"这个项目展示了如何在微信小程序中利用canvas实现图片的拖动、缩放和裁剪功能。开发者可以在此基础上扩展更多功能,比如添加旋转、滤镜等,从而打造更加强大的图片编辑工具...

    使用d3-force、d3-zoom、d3-drag绘制的图像

    D3.js(Data-Driven Documents)是一个强大的JavaScript库,它允许数据与SVG(可缩放矢量图形)元素绑定,从而创建动态、数据驱动的可视化。我们将主要关注以下知识点: 1. **d3-force**:这是D3.js中的一个模块,...

    vue-power-drag.zip

    Vue.js 是一款轻量级、高性能的前端JavaScript框架,以其易用性和灵活性深受开发者的喜爱。在Vue Power Drag中,它扩展了Vue的功能,允许用户通过简单的API实现复杂的拖放操作。 Vue Power Drag 的核心概念是利用...

    vue-drag-tree:基于Vue的拖拽组织树

    vue-drag-tree-org内容列表安装# use npmnpm install vue-drag-tree-org# use yarnyarn add vue-drag-tree-org使用# useimport VueDragTreeOrg from 'vue-drag-tree-org'Vue.use(VueDragTreeOrg)# or usecomponents:...

    vue-drag-resize:用于调整大小和拖动元素的Vue组件

    Vue拖动调整大小 Vue可拖动和可调整大小元素的组件。 目录 演示版 产品特点 轻巧,无依赖 ...import VueDragResize from 'vue-drag-resize' Vue . component ( 'vue-drag-resize' , VueDragResize ) 使

    vue-drag-resize-rotate:vueComponent拖动,调整大小和旋转

    描述(Describe) 基于 vue2.6 的一个 dom 元素拖拽、缩放和旋转的组件; 支持基本的触点控制、宽高位置范围值、子父级嵌套、锁定定比例和层级等;...import vueDragResizeRotate from '@liaogn/vue-drag-re

    v-drag:在Vue.js上集成拖动的最简单方法

    但是,作为开发人员,您可能会知道,将其与JavaScript一起使用具有很大的挑战性。 在这种情况下,Vue.js也无济于事。 因此,为了简化起见,编写了v-drag。 其目的是使用Vue.js快速集成和自定义项目中的可拖动元素。...

    v-drag-drop:Vue.js的简约拖放指令

    注意:v-drag-drop的2.x及更高版本仅与Vue 3兼容。 如果使用Vue 2,请安装1.x版。 旨在封装本机拖放API的某些特性,并使其更易于与Vue.js一起使用。 还添加了一些方便的功能,例如名称空间。 目录 安装 安装v-drag-...

    cypress-drag-drop:用于拖放支持的 cypress 子命令

    npm install --save-dev @4tw/cypress-drag-drop 或纱线 yarn add --dev @4tw/cypress-drag-drop 在加载 Cypress 之前(通常在您的commands.js )放置以下行: require ( '@4tw/cypress-drag-drop' ) 或者,...

    仿微信朋友圈图片拖拽排序 wx-drag-sort.rar

    本项目“仿微信朋友圈图片拖拽排序 wx-drag-sort.rar”专注于实现一个类似于微信朋友圈的功能,让用户可以通过拖拽操作对上传的图片进行排序。这种交互方式提高了用户体验,使得用户可以更加直观和便捷地管理自己的...

    ngx-drag-scroll:轻量级的响应式Angular轮播库

    轻型拖动以滚动角度的旋转木马 维护者想要 滚动拖动! 尝试! 安装 您可以在npm上获得它。 npm install ngx-drag-scroll --save ...这个项目需要Angular 5+作为依赖。...您需要将...drag-scroll style="wid

    js动态树合集(dtree,dhtmlxtree,drag-drop-tree)

    在给定的压缩包文件中,包含了几种不同的库,如dtree、dhtmlxtree(1.5普通版及1.3专业版)以及drag-drop-tree,这些都是用于实现动态树功能的JavaScript库。接下来,我们将深入探讨这些库及其相关的知识点。 1. ...

    vue-drag-chart 拖动/缩放的图表组件的实例代码

    Vue-Drag-Chart 是一款基于 Vue.js 的图表组件,它具备拖动和缩放功能,为开发者提供了更灵活的交互体验。在本文中,我们将详细探讨如何使用 Vue-Drag-Chart 创建可拖动和缩放的图表,并了解其基本配置和使用方法。 ...

    vdesjs-drag可视化代码生成工具 v1.2.zip

    此外,v1.2版本的功能也得到了丰富和增强,支持包括HTML、CSS和JavaScript在内的前端框架,也可能支持Python、Java等其他编程语言。这种多语言支持能力为用户进行跨平台开发和多语言项目提供了极大的便利,也满足了...

    angular-drag.zip

    Angular是一款由Google维护的前端JavaScript框架,它以其模块化、可维护性和强大的数据绑定功能而备受开发者喜爱。在Angular应用中,拖放(Drag & Drop)功能是一项常见的交互需求,它使得用户可以通过简单的手势...

    基于HTML5 拖拽接口(Drag and drag-and-drop interfaces based on HTML5

    HTML5是现代网页开发的重要标准,它引入了...结合CSS3动画和JavaScript库,可以创建出更加动态和直观的用户界面。对于开发者而言,理解和掌握HTML5的拖放接口,无疑能够提升网页应用的用户体验,拓宽应用的创新空间。

    react-drag-listview:一个用于React的简单的可拖动列表组件

    react-drag-listview React拖动列表组件。安装例子拖曳行拖动列 发展npm installnpm start 用法const ReactDragListView = require ( 'react-drag-listview' ) ;class Demo extends React . Component { constructor...

    react-native-drag-resize:React Native组件用于可拖动和可调整大小的操作

    $ npm i react-native-drag-resize --save 基本用法 安装react-native-drag-resize软件包以进行项目 导入模块到文件 import { DragResizeBlock , } from 'react-native-drag-resize' ; 然后,使用如下组件: ...

    0301drag-sort-table_javascript_veeqi

    标题“0301drag-sort-table_javascript_veeqi”暗示了一个关于JavaScript实现的拖动排序表格的项目。这个项目可能包含一个可交互的表格,用户可以通过拖动行来改变表格中的数据顺序。这里,我们将深入探讨JavaScript...

Global site tag (gtag.js) - Google Analytics