`
hedahai119
  • 浏览: 106385 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

JS拖拽例子

    博客分类:
  • 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=gb2312" />
    <title>Freedom</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>


转至:http://www.jsweb8.cn/html/js_page/1251.htm
可以去看效果!
分享到:
评论

相关推荐

    JS 拖拽例子

    这个“JS 拖拽例子”是一个教学实例,旨在展示如何在网页上实现拖放操作。下面我们将详细讨论拖放的基本原理和实现步骤。 首先,拖放功能涉及到两个主要事件:`dragstart` 和 `drop`。当用户开始拖动一个元素时,会...

    JS拖拽小例子

    一个关于javascript的拖拽的例子,很简单,新手学习用。

    JS 拖拽的2个例子 各有优缺点

    学习这两个例子,我们可以理解JavaScript拖拽的基本原理,并对比不同实现方式的适用场景。纯JavaScript拖拽适合小型项目,追求轻量化;而基于jQuery UI的拖拽则适用于需要高级特性和跨平台兼容性的复杂应用。在实际...

    js控制多个div拖拽和拖动、且能保存数据至cookie、数据库、xml

    通过这个例子,开发者可以学习到如何实现JavaScript拖拽功能,以及如何与不同的数据存储机制集成,从而在实际项目中灵活应用。 总的来说,这个主题涵盖了JavaScript事件处理、DOM操作、数据序列化、Ajax通信以及...

    js拖动层例子-整个网页可以拖动

    js拖动层例子-整个网页可以拖动! 值得下载看看!资源免费,大家分享!!

    Ajax拖拽例子代码

    在这个例子中,`index.html`会定义一个可拖动的元素,并通过`&lt;script&gt;`标签引入`jquery.js`,这是一个基础的jQuery库,用于简化JavaScript操作。`interface.js`则包含了实现拖拽功能的JavaScript代码,而`config.js`...

    JQuery实现的GridView行拖拽例子

    在这个"JQuery实现的GridView行拖拽例子"中,我们将深入探讨如何利用jQuery来实现GridView控件中行的拖放功能,这是一种增强用户交互性和界面动态性的常见方法。 首先,GridView是ASP.NET中用于显示数据的一种Web...

    php+mysql+js拖拽div实例

    **一、JavaScript拖拽功能实现** 1. **事件监听**:首先,我们需要在HTML中为要拖动的Div添加`draggable`属性,然后使用JavaScript监听`dragstart`、`drag`和`dragend`事件。这些事件分别在拖动开始、拖动过程中和...

    js拖动拖动一个容器中的内容到另一个容器中

    在JavaScript(JS)中,实现拖放功能可以增强用户的交互体验,特别是在网页设计和开发中。这个功能允许用户通过鼠标操作将元素从一个容器移动到另一个容器,同时在原容器中删除该元素。本篇文章将深入探讨如何使用...

    js 仿 igoogle 拖拽 效果

    7. **可拖动元素标识**:为了让JavaScript知道哪些元素可以被拖动,可以添加一个特定的CSS类或者数据属性到可拖动元素上,然后在JavaScript中根据这个标识来处理拖拽逻辑。 在实际开发中,为了使代码更简洁和易于...

    10个图片与布局拖拽例子

    在"10个图片与布局拖拽例子"中,我们可以学习到如何使用JavaScript和CSS来实现这些功能。JavaScript通常用于处理用户的拖放动作,监听鼠标事件,计算元素的位置,并更新DOM以反映这些变化。CSS则用于定义元素的样式...

    bootstarp拖拽布局例子

    在"bootstarp拖拽布局例子"中,我们主要关注的是如何利用Bootstrap的工具和特性来实现用户友好的拖拽布局,这在设计网页时非常实用,尤其是对于希望创建类似于QQ空间小窝布局模式下自由布局的体验。 Bootstrap的...

    ext的tree两个拖拽例子

    在EXT JS这个强大的JavaScript框架中,TreePanel是用于展示层级数据的一个组件,它通常用于构建树形结构,例如文件系统、组织结构等。本主题主要关注EXT的TreePanel中的拖放(Drag and Drop)功能,这是一项允许用户...

    一个基于纯JavaScript实现表格列拖动、排序的功能的js类库源码及例子

    "一个基于纯JavaScript实现表格列拖动、排序的功能的js类库源码及例子" 提供了一个解决方案,让开发者能够轻松地为他们的网页应用添加动态且用户友好的功能。这个类库专门针对表格数据展示,允许用户通过拖动列头来...

    EXT 控件拖动例子

    在这个"EXT 控件拖动例子"中,我们将深入探讨EXTJS如何实现控件的拖放功能,以及如何在动态布局中运用这一特性。 EXTJS 提供了一个名为`Ext.dd.DragDrop`的接口,它使得在界面上的元素可以被拖动和放置。这个接口...

    又一个很好的js控制实现动态拖动表格宽度的例子

    在这个例子中,JS负责监听鼠标事件,识别用户是否在表格边框上进行拖动操作。当检测到开始拖动时,JS会记录初始鼠标位置和列宽;拖动过程中,它会实时计算新的宽度并更新表格样式;最后,当拖动结束时,JS会确保宽度...

    js 前端鼠标拖动事件实例

    这个实例主要涉及的关键词是“js”(JavaScript)、“ASP”(尽管在这个上下文中并不直接相关,但可能是用户提及的一个相关技术栈)、“web”(Web开发)以及“鼠标事件”。我们将重点讲解JavaScript中的鼠标拖动...

    javascript图片预览(滚动放大缩小和拖动查看)

    总结来说,这个例子展示了如何使用JavaScript(特别是jQuery库)结合HTML和CSS实现图片预览功能,包括滚动时自动放大缩小图片以及拖动查看图片的不同部分。开发者完全自定义了这些行为,提供了良好的用户体验。通过...

    js拖拽demo

    JavaScript(简称JS)拖拽功能是网页交互中的一个重要特性,它允许用户通过鼠标操作页面元素,实现元素在页面上的自由移动。在这个"js拖拽demo"中,我们将深入探讨如何利用JavaScript实现这一功能。 首先,我们需要...

    js实现拖拽的实现js实现拖拽的实现

    在这个例子中,我们阻止了默认的处理方式(通常是打开链接),并将拖动的元素添加到目标容器中。 通过这样的实现,我们可以创建出具有高度交互性的拖拽功能,让网页变得更加生动有趣。在实际开发中,还可以根据需求...

Global site tag (gtag.js) - Google Analytics