`
thomas0988
  • 浏览: 484995 次
  • 性别: Icon_minigender_1
  • 来自: 南阳
社区版块
存档分类
最新评论

页面层次拖拽效果

 
阅读更多
	<!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">
		<title>无标题页</title>
	  
	<style type="text/css">   
	  
	body {   
	width:100%;   
	max-height:100%;   
	padding:0px;   
	margin:0px;   
	text-align:center;   
	}   
	  
	.cell {   
	float:left;   
	clear:right;   
	}   
	  
	.row {   
	clear:both;   
	}   
	  
	.r_nbsp {   
	width:20px;   
	}   
	  
	.root {   
	width:868px;   
	margin: 0 auto;   
	}   
	  
	.root * {   
	/*次属性FF的说*/  
	-moz-user-select:none;   
	}   
	  
	.line {   
	width:202px;   
	line-height:20px;   
	height:20px;   
	overflow:hidden;   
	font-size:12px;   
	}   
	  
	.move {   
	border:#CCCCCC 1px solid;   
	width:200px;   
	height:aotu;   
	}   
	  
	.title {   
	height:24px;   
	cursor:move;   
	background:#0080C0;   
	font-size:12px;   
	font-weight:bold;   
	color:#FFFFFF;   
	line-height:24px;   
	text-align:center;   
	}   
	  
	.content {   
	border-top:#CCCCCC 1px solid;   
	height:100px;   
	background-color:#F7F7F7;   
	}   
	  
	.CDrag_temp_div {   
	border:#CCCCCC 1px dashed;   
	}   
	  
	</style>   
		<script type="text/javascript">   
	var Class = {   
	//创建类   
	create: function () {   
	return function () {   
	this.initialize.apply(this, arguments);   
	};   
	}   
	};   
	  
	var $A = function (a) {   
	//转换数组   
	return a ? Array.apply(null, a) : new Array;   
	};   
	  
	var $ = function (id) {   
	//获取对象   
	return document.getElementById(id);   
	};   
	  
	Object.extend = function (a, b) {   
	//追加方法   
	for (var i in b) a[i] = b[i];   
	return a;   
	};   
	  
	Object.extend(Object, {   
	  
	addEvent : function (a, b, c, d) {   
	//添加函数   
	if (a.attachEvent) a.attachEvent(b[0], c);   
	else a.addEventListener(b[1] || b[0].replace(/^on/, ""), c, d || false);   
	return c;   
	},   
	  
	delEvent : function (a, b, c, d) {   
	if (a.detachEvent) a.detachEvent(b[0], c);   
	else a.removeEventListener(b[1] || b[0].replace(/^on/, ""), c, d || false);   
	return c;   
	},   
	  
	reEvent : function () {   
	//获取Event   
	return window.event ? window.event : (function (o) {   
	do {   
	o = o.caller;   
	} while (o && !/^\[object[ A-Za-z]*Event\]$/.test(o.arguments[0]));   
	return o.arguments[0];   
	})(this.reEvent);   
	}   
	  
	});   
	  
	Function.prototype.bind = function () {   
	//绑定事件   
	var wc = this, a = $A(arguments), o = a.shift();   
	return function () {   
	wc.apply(o, a.concat($A(arguments)));   
	};   
	};   
	  
	  
	var Table = Class.create();   
	  
	Table.prototype = {   
	  
	initialize : function () {   
	//初始化   
	var wc = this;   
	wc.cols = new Array; //创建列   
	},   
	  
	addCols : function (o) {   
	//添加列   
	var wc = this, cols = wc.cols, i = cols.length;   
	return cols[i] = {   
	id : i, div : o, rows : new Array, //创建行   
	addRow : wc.addRow, chRow : wc.chRow, inRow : wc.inRow, delRow : wc.delRow   
	};   
	},   
	  
	addRow : function (o) {   
	//添加行   
	var wc = this, rows = wc.rows, i = rows.length;   
	return rows[i] = {   
	id : i, div : o, cols : wc   
	};   
	},   
	  
	inRow : function (a, b) {   
	//插入行   
	var wc = b.cols = this, rows = wc.rows, i;   
	if (a < rows.length) {   
	for (i = a ; i < rows.length ; i ++) rows[i].id ++;   
	rows.splice(a, 0, b);   
	b.id = a;   
	return b;   
	} else {   
	b.id = rows.length;   
	return rows[b.id] = b;   
	}   
	},   
	  
	delRow : function (a) {   
	//删除列   
	var wc = this, rows = wc.rows, i, r;   
	if (a >= rows.length) return;   
	r = rows[a];   
	rows.splice(a, 1);   
	for (i = a ; i < rows.length ; i ++) rows[i].id = i;   
	return r;   
	}   
	};   
	var CDrag = Class.create();   
	  
	CDrag.IE = /MSIE/.test(window.navigator.userAgent);   
	  
	CDrag.prototype = {   
	  
	initialize : function () {   
	//初始化成员   
	var wc = this;   
	wc.table = new Table; //建立表格对象   
	wc.iFunc = wc.eFunc = null;   
	wc.obj = { on : { a : null, b : "" }, row : null, left : 0, top : 0 };   
	wc.temp = { row : null, div : document.createElement("div") };   
	wc.temp.div.setAttribute(CDrag.IE ? "className" : "class", "CDrag_temp_div");   
	wc.temp.div.innerHTML = " ";   
	},   
	  
	reMouse : function (a) {   
	//获取鼠标位置   
	var e = Object.reEvent();   
	return {   
	x : document.documentElement.scrollLeft + e.clientX,   
	y : document.documentElement.scrollTop + e.clientY   
	};   
	},   
	  
	rePosition : function (o) {   
	//获取元素绝对位置   
	var $x = $y = 0;   
	do {   
	$x += o.offsetLeft;   
	$y += o.offsetTop;   
	} while ((o = o.offsetParent) && o.tagName != "BODY");   
	return { x : $x, y : $y };   
	},   
	  
	sMove : function (o) {   
	//当拖动开始时设置参数   
	  
	var wc = this;   
	if (wc.iFunc || wc.eFinc) return;   
	  
	var mouse = wc.reMouse(), obj = wc.obj, temp = wc.temp, div = o.div, position = wc.rePosition(div);   
	  
	obj.row = o;   
	obj.on.b = "me";   
	obj.left = mouse.x - position.x;   
	obj.top = mouse.y - position.y;   
	  
	temp.row = document.body.appendChild(div.cloneNode(true)); //复制预拖拽对象   
	  
	with (temp.row.style) {   
	//设置复制对象   
	position = "absolute";   
	left = mouse.x - obj.left + "px";   
	top = mouse.y - obj.top + "px";   
	zIndex = 100;   
	opacity = "0.3";   
	filter = "alpha(opacity:30)";   
	}   
	  
	with (temp.div.style) {   
	//设置站位对象   
	height = div.clientHeight + "px";   
	width = div.clientWidth + "px";   
	}   
	  
	  
	/*div.parentNode.insertBefore(temp.div, div);  
	div.style.display = "none"; //隐藏预拖拽对象*/  
	div.parentNode.replaceChild(temp.div, div);   
	  
	wc.iFunc = Object.addEvent(document, ["onmousemove"], wc.iMove.bind(wc));   
	wc.eFunc = Object.addEvent(document, ["onmouseup"], wc.eMove.bind(wc));   
	document.onselectstart = new Function("return false");   
	},   
	  
	iMove : function () {   
	//当鼠标移动时设置参数   
	var wc = this, cols = wc.table.cols, mouse = wc.reMouse(), obj = wc.obj, temp = wc.temp, row = obj.row, div = temp.row,   
	t_position, t_cols, t_rows, i, j;   
	  
	with (div.style) {   
	left = mouse.x - obj.left + "px";   
	top = mouse.y - obj.top + "px";   
	}   
	  
	for (i = 0 ; i < cols.length ; i ++) {   
	t_cols = cols[i];   
	t_position = wc.rePosition(t_cols.div);   
	if (t_position.x < mouse.x && t_position.x + t_cols.div.offsetWidth > mouse.x) {   
	if (t_cols.rows.length > 0) { //如果此列行数大于0   
	if (wc.rePosition(t_cols.rows[0].div).y + 20 > mouse.y) {   
	//如果鼠标位置大于第一行的位置即是最上。。   
	//向上   
	obj.on.a = t_cols.rows[0];   
	obj.on.b = "up";   
	obj.on.a.div.parentNode.insertBefore(temp.div, obj.on.a.div);   
	} else if (t_cols.rows.length > 1 && t_cols.rows[0] == row &&   
	wc.rePosition(t_cols.rows[1].div).y + 20 > mouse.y) {   
	//如果第一行是拖拽对象而第鼠标大于第二行位置则,没有动。。   
	//向上   
	obj.on.b = "me";   
	t_cols.rows[1].div.parentNode.insertBefore(temp.div, t_cols.rows[1].div);   
	} else {   
	for (j = t_cols.rows.length - 1 ; j > -1 ; j --) {   
	//重最下行向上查询   
	t_rows = t_cols.rows[j];   
	if (t_rows == obj.row) continue;   
	if (wc.rePosition(t_rows.div).y < mouse.y) {   
	//如果鼠标大于这行则在这行下面   
	if (t_rows.id + 1 < t_cols.rows.length && t_cols.rows[t_rows.id + 1] != obj.row) {   
	//如果这行有下一行则重这行下一行的上面插入   
	t_cols.rows[t_rows.id + 1].div.parentNode.   
	insertBefore(temp.div, t_cols.rows[t_rows.id + 1].div);   
	obj.on.a = t_rows;   
	obj.on.b = "down";   
	} else if (t_rows.id + 2 < t_cols.rows.length) {   
	//如果这行下一行是拖拽对象则插入到下两行,即拖拽对象返回原位   
	t_cols.rows[t_rows.id + 2].div.parentNode.   
	insertBefore(temp.div, t_cols.rows[t_rows.id + 2].div);   
	obj.on.b = "me";   
	} else {   
	//前面都没有满足则放在最低行   
	t_rows.div.parentNode.appendChild(temp.div);   
	obj.on.a = t_rows;   
	obj.on.b = "down";   
	}   
	return;   
	}   
	}   
	}   
	} else {   
	//此列无内容添加新行   
	t_cols.div.appendChild(temp.div);   
	obj.on.a = t_cols;   
	obj.on.b = "new";   
	}   
	}   
	}   
	},   
	  
	eMove : function () {   
	//当鼠标释放时设置参数   
	var wc = this, obj = wc.obj, temp = wc.temp, row = obj.row, div = row.div, o_cols, n_cols;   
	  
	if (obj.on.b == "up") {   
	//向最上添加   
	o_cols = obj.row.cols;   
	n_cols = obj.on.a.cols;   
	n_cols.inRow(0, o_cols.delRow(obj.row.id));   
	} else if (obj.on.b == "down") {   
	//相对向下添加   
	o_cols = obj.row.cols;   
	n_cols = obj.on.a.cols;   
	n_cols.inRow(obj.on.a.id + 1, o_cols.delRow(obj.row.id));   
	} else if (obj.on.b == "new") {   
	//向无内容列添加   
	o_cols = obj.row.cols;   
	n_cols = obj.on.a;   
	n_cols.inRow(0, o_cols.delRow(obj.row.id));   
	}   
	  
	temp.div.parentNode.replaceChild(div, temp.div);   
	temp.row.parentNode.removeChild(temp.row);   
	delete temp.row;   
	  
	Object.delEvent(document, ["onmousemove"], wc.iFunc);   
	Object.delEvent(document, ["onmouseup"], wc.eFunc);   
	document.onselectstart = wc.iFunc = wc.eFunc = null;   
	},   
	  
	add : function (o) {   
	//添加对象   
	var wc = this;   
	Object.addEvent(o.div.childNodes[CDrag.IE ? 0 : 1], ["onmousedown"], wc.sMove.bind(wc, o));   
	},   
	  
	parse : function (o) {   
	//初始化成员   
	var wc = this, table = wc.table, cols, i, j;   
	for (i = 0 ; i < o.length ; i ++) {   
	cols = table.addCols(o[i].cols);   
	for (j = 0 ; j < o[i].rows.length ; j ++)   
	wc.add(cols.addRow(o[i].rows[j]));   
	}   
	}   
	  
	};   
	  
	Object.addEvent(window, ["onload"], function () {   
	var wc = new CDrag;   
	wc.parse([   
	  
	{   
	cols : $("m_1"), rows : [$("m_1_1"), $("m_1_2"), $("m_1_3"), $("m_1_4")]   
	},   
	  
	{   
	cols : $("m_2"), rows : [$("m_2_1"), $("m_2_2"), $("m_2_3"), $("m_2_4")]   
	},   
	  
	{   
	cols : $("m_3"), rows : [$("m_3_1"), $("m_3_2"), $("m_3_3"), $("m_3_4")]   
	},   
	  
	{   
	cols : $("m_4"), rows : [$("m_4_1"), $("m_4_2"), $("m_4_3"), $("m_4_4")]   
	}   
	  
	]);   
	});   
	</script>   
	</head><body><br />   
	<div class="root">   
		<div class="cell" id="m_1">   
			<div class="line">   
				第一列</div>   
			<div class="move" id="m_1_1">   
				<div class="title">   
					第一列的第一个的说</div>   
				<div class="content">   
				</div>   
			</div>   
			<div class="move" id="m_1_2">   
				<div class="title">   
					第一列的第二个的说</div>   
				<div class="content">   
				</div>   
			</div>   
			<div class="move" id="m_1_3">   
				<div class="title">   
					第一列的第三个的说</div>   
				<div class="content">   
				</div>   
			</div>   
			<div class="move" id="m_1_4">   
				<div class="title">   
					第一列的第四个的说</div>   
				<div class="content">   
				</div>   
			</div>   
		</div>   
		<div class="cell r_nbsp">   
			 </div>   
		<div class="cell" id="m_2">   
			<div class="line">   
				第二列</div>   
			<div class="move" id="m_2_1">   
				<div class="title">   
					第二列的第一个的说</div>   
				<div class="content">   
				</div>   
			</div>   
			<div class="move" id="m_2_2">   
				<div class="title">   
					第二列的第二个的说</div>   
				<div class="content">   
				</div>   
			</div>   
			<div class="move" id="m_2_3">   
				<div class="title">   
					第二列的第三个的说</div>   
				<div class="content">   
				</div>   
			</div>   
			<div class="move" id="m_2_4">   
				<div class="title">   
					第二列的第四个的说</div>   
				<div class="content">   
				</div>   
			</div>   
		</div>   
		<div class="cell r_nbsp">   
			 </div>   
		<div class="cell" id="m_3">   
			<div class="line">   
				第三列</div>   
			<div class="move" id="m_3_1">   
				<div class="title">   
					第三列的第一个的说</div>   
				<div class="content">   
				</div>   
			</div>   
			<div class="move" id="m_3_2">   
				<div class="title">   
					第三列的第二个的说</div>   
				<div class="content">   
				</div>   
			</div>   
			<div class="move" id="m_3_3">   
				<div class="title">   
					第三列的第三个的说</div>   
				<div class="content">   
				</div>   
			</div>   
			<div class="move" id="m_3_4">   
				<div class="title">   
					第三列的第四个的说</div>   
				<div class="content">   
				</div>   
			</div>   
		</div>   
		<div class="cell r_nbsp">   
			 </div>   
		<div class="cell" id="m_4">   
			<div class="line">   
				第四列</div>   
			<div class="move" id="m_4_1">   
				<div class="title">   
					第四列的第一个的说</div>   
				<div class="content">   
				</div>   
			</div>   
			<div class="move" id="m_4_2">   
				<div class="title">   
					第四列的第二个的说</div>   
				<div class="content">   
				</div>   
			</div>   
			<div class="move" id="m_4_3">   
				<div class="title">   
					第四列的第三个的说</div>   
				<div class="content">   
				</div>   
			</div>   
			<div class="move" id="m_4_4">   
				<div class="title">   
					第四列的第四个的说</div>   
				<div class="content">   
				</div>   
			</div>   
		</div>   
	</div> 
	</body>
	</html>

 

分享到:
评论

相关推荐

    可视化H5页面与交互动画设计制作 木疙瘩标准教程

    通过添加按钮、链接、表单等交互元素,用户可以与页面进行更深层次的互动。例如,点击按钮可以触发动画或跳转至其他页面,滑动屏幕可以展示更多信息等。在木疙瘩中,设计者可以通过拖拽方式快速添加交互元素,并配置...

    jquery拖拽树形菜单

    jQuery UI库提供了拖拽功能,它允许用户通过鼠标或触摸设备将元素在整个页面或某个限制区域内移动。要实现拖拽效果,首先需要在HTML中定义可拖动的元素,然后在jQuery中调用`.draggable()`方法: ```html 这是一...

    基于Vue.js的可拖拽树组件

    - 在Vue.js中,可以监听`dragstart`、`dragover`、`drop`等事件,结合Vue的响应式系统来更新数据模型,从而实现拖拽效果。 4. **跨浏览器兼容性** - 虽然现代浏览器对HTML5 API的支持较好,但考虑到IE Edge和其他...

    可拖拽的谷歌样式纯javascript模态窗口插件

    Material Design是一种视觉语言,强调清晰的层次结构、动画效果和触觉反馈,旨在提供一致、美观且易于理解的用户体验。谷歌样式的模态窗口会具有简洁、明快的外观,以及平滑的过渡和动画效果。 纯JavaScript实现的...

    展示屏代码集合前端页面

    3. 布局设计:在前端页面中,合理布局各个图表,确保信息层次清晰,视觉效果良好。这可能涉及到CSS Grid或Flexbox布局,以及响应式设计,使得大屏在不同设备上都能有良好的显示效果。 4. 实时更新:如果数据需要...

    jquery 强大拖拽布局插件

    在这种布局中,各部分宽度比例不一,可以创建出层次感丰富的页面。例如,“1:33:11”可能表示左侧栏占据1份宽度,中间栏占据33份,右侧栏占据11份,总共45份,适应不同内容展示的需求。 描述中的“功能模块设置:可...

    Jquery实现可拖拽的树菜单

    在Web开发领域,jQuery是一个广泛使用的...实际应用中可能需要根据具体需求进行调整,例如增加节点的展开/折叠功能、优化拖拽效果、处理边界情况等。记得在开发过程中进行充分的测试,确保功能的稳定性和用户体验。

    pc多层多区域拖拽

    2. **多区域划分**:在网页的各个部分设置可拖放的区域,用户可以根据需要将元素拖放到指定的区域内,实现动态布局或者组织信息。 3. **样式自定义**:由于插件允许完全自定义样式,开发者可以按照自己的设计需求...

    ztree 异步加载 拖拽 右键菜单 功能

    异步加载是zTree的核心特性之一,它允许在用户滚动或点击节点时按需加载子节点数据,减少了初始页面加载时的数据量,提高了页面响应速度。实现异步加载需要设置`async`参数,例如: ```javascript var setting = { ...

    多种JS弹窗效果

    4. **3D效果(3D Transitions)**:对于追求更高层次视觉体验的开发者,可以尝试用JS实现旋转、缩放等3D转换效果。这需要利用到CSS3的3D转换属性和JavaScript的变换函数。 5. **动画弹出(Animated Popups)**:...

    android实现uc和墨迹天气那样的左右拖动效果

    这种效果通常被用在应用的主页面或者图片浏览等场景,为用户提供流畅的界面交互体验。接下来,我们将深入探讨如何在Android中实现这样的功能。 1. **手势检测(Gesture Detection)** - Android提供了`...

    jquery两级拖拽效果插件

    在描述中提到的"jqueryUI组件列表拖拽"就是这个功能的应用,用户可以把列表中的项拖放到指定的模块中。 2. **jQuery UI Sortable**: 另一个关键组件是Sortable,它使得列表或网格中的元素可以被用户重新排序。当...

    js 漂亮的横向树,支持拖拽,编辑删除添加

    JavaScript 横向树是一种特殊的可视化数据结构,它在网页中呈现为水平排列的节点,通常用于展示层次结构清晰的信息,比如组织结构、文件系统或流程图。这种类型的树状结构相比传统的垂直树,更适应有限的空间,尤其...

    课程教学大纲(前端页面优化).pdf

    7. **jQuery插件应用**:介绍jQuery UI插件,如autocomplete、拖拽、折叠面板、日历、Tab和模态对话框等,以及使用第三方插件如slidr制作幻灯片效果,增强网页功能和视觉效果。 课程推荐教材《jQuery实战从入门到...

    jsPlumbToolkit +ztree拖拽连线demo

    3. **监听zTree节点拖放事件**:当节点被拖放到画布上时,利用 `jsPlumbToolkit` 添加新的节点。 4. **创建连线**:监听拖拽事件,当用户拖动鼠标在两个节点之间创建连接时,调用 `jsPlumbToolkit` 的方法创建连线。...

    多级渐变菜单,经典树型菜单,三级关联菜单等多种菜单效果

    本篇文章将详细讲解标题和描述中提到的各种菜单效果,包括多级渐变菜单、经典树型菜单、三级关联菜单、收藏夹式树型菜单、拖拽菜单、五角型菜单以及软件型菜单。 首先,多级渐变菜单是一种视觉效果丰富的菜单设计,...

    treetable 数据表格拖拽的jquery插件

    1. **引入依赖**:确保页面中已经包含了jQuery库以及TreeTable插件的JS和CSS文件。 2. **初始化表格**:使用jQuery选择器找到需要转换为TreeTable的元素,并调用初始化方法,如`$("#myTable").treeTable();` 3. **...

    js可拖拽最大最小化弹出层窗口.zip

    在JavaScript中,可以通过改变元素的`z-index`属性来控制其在层次结构中的位置,确保弹出层位于最前面。 6. **事件委托**:为了提高性能和减少事件监听器的数量,开发者可能会使用事件委托。例如,可以在父元素上...

    tab切换类型,左右拖拽翻页

    开发者可以利用这些技术监听用户的触摸动作,通过计算手指移动的距离和速度来判断是否触发翻页,然后通过CSS3的transform属性实现平滑的动画效果,使页面在拖动后平滑过渡到下一个或上一个tab。 总的来说,“tab...

Global site tag (gtag.js) - Google Analytics