`
tengteng721
  • 浏览: 18022 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类

js 表格拖拽

阅读更多
前几天看到网上一个table拖拽的例子,自己改了改,改成自己需要的了
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
<TITLE>拖动</TITLE>
<STYLE>
td{width:20%;height:20px;cursor:default;}
div{font-size:13px;}..
table{border:1px solid black;font-size:13px;}
</STYLE>
<script>
var dragedTable_x0,dragedTable_y0,dragedTable_x1,dragedTable_y1;
var dragedTable_movable = false;
var dragedTable_preCell = null;
var dragedTable_normalColor = null;
//起始单元格的颜色
var dragedTable_preColor = "lavender";
//目标单元格的颜色
var dragedTable_endColor = "#FFCCFF";
//移动div  id
var dragedTable_movedDiv = "dragedTable_movedDiv";
var dragedTable_tableId = "";

//设置拖动div
function DragedTable(tableId){
dragedTable_tableId=tableId;
var oTempDiv = document.createElement("div");
oTempDiv.id = dragedTable_movedDiv;
oTempDiv.onselectstart = function(){return false};
oTempDiv.style.cursor = "hand";
oTempDiv.style.position = "absolute";
oTempDiv.style.border = "1px solid black";
oTempDiv.style.backgroundColor = dragedTable_endColor;
oTempDiv.style.display = "none";
document.body.appendChild(oTempDiv);
document.all(tableId).onmousedown = showDiv;
}

//得到控件的绝对位置
function getPos(cell){
var pos = new Array();
var t=cell.offsetTop;
var l=cell.offsetLeft;
while(cell=cell.offsetParent){
t+=cell.offsetTop;
l+=cell.offsetLeft;
}
pos[0] = t;
pos[1] = l;
return pos;
}

//显示图层
function showDiv(){
var obj = event.srcElement;
var pos = new Array();
//获取过度图层
var oDiv = document.all(dragedTable_movedDiv);
if(obj.tagName.toLowerCase() == "td"){
obj.style.cursor = "hand";
pos = getPos(obj);
//计算中间过度层位置,赋值
oDiv.style.width = obj.offsetWidth;
oDiv.style.height = obj.offsetHeight;
oDiv.style.top = pos[0];
oDiv.style.left = pos[1];
oDiv.innerHTML = obj.innerHTML;
oDiv.style.display = "";
dragedTable_x0 = pos[1];
dragedTable_y0 = pos[0];
dragedTable_x1 = event.clientX;
dragedTable_y1 = event.clientY;
//记住原td
dragedTable_normalColor = obj.style.backgroundColor;
obj.style.backgroundColor = dragedTable_preColor;
dragedTable_preCell = obj;
dragedTable_movable = true;
}
}

document.onmousemove = function(){
dragDiv();
}

function dragDiv(){
if(dragedTable_movable){
//document.write(dragedTable_movedDiv);
var oDiv = document.all(dragedTable_movedDiv);
var pos = new Array();
oDiv.style.top = event.clientY - dragedTable_y1 + dragedTable_y0;
oDiv.style.left = event.clientX - dragedTable_x1 + dragedTable_x0;
//targetTableId  为要放置的表的id
var oTable = document.all("targetTableId");
//alert(oTable.cells.length);
for(var i=0; i<oTable.cells.length;){
if(oTable.cells[i].tagName.toLowerCase() == "td"){
pos = getPos(oTable.cells[i]);
if(event.x>pos[1]&&event.x<pos[1]+oTable.cells[i].offsetWidth
&& event.y>pos[0]&& event.y<pos[0]+oTable.cells[i].offsetHeight){
if(oTable.cells[i] != dragedTable_preCell)
oTable.cells[i].style.backgroundColor = dragedTable_endColor;
}
else{
if(oTable.cells[i] != dragedTable_preCell)
oTable.cells[i].style.backgroundColor = dragedTable_normalColor;
}
}
//控制得到第几列的cell,此为得到第一列的cell
i=i+2;
}
}
}

function hideDiv(){
if(dragedTable_movable){
var oTable = document.all("targetTableId");
var pos = new Array();
if(dragedTable_preCell != null){
for(var i=0; i<oTable.cells.length;){
//alert(i)
pos = getPos(oTable.cells[i]);
//计算鼠标位置,是否在某个单元格的范围之内
if(event.x>pos[1]&&event.x<pos[1]+oTable.cells[i].offsetWidth
&& event.y>pos[0]&& event.y<pos[0]+oTable.cells[i].offsetHeight){
if(oTable.cells[i].tagName.toLowerCase() == "td"){
//交换文本
dragedTable_preCell.innerHTML = oTable.cells[i].innerHTML;
oTable.cells[i].innerHTML = document.all(dragedTable_movedDiv).innerHTML;
//清除原单元格和目标单元格的样式
dragedTable_preCell.style.backgroundColor = dragedTable_normalColor;
oTable.cells[i].style.backgroundColor = dragedTable_normalColor;
oTable.cells[i].style.cursor = "";
dragedTable_preCell.style.cursor = "";
dragedTable_preCell.style.backgroundColor = dragedTable_normalColor;
}
}
i=i+2;
}
}
dragedTable_movable = false;
//清除提示图层
document.all(dragedTable_movedDiv).style.display = "none";
}
}

document.onmouseup = function(){
hideDiv();
var oTable = document.all(dragedTable_tableId);
for(var i=0; i<oTable.cells.length; i++)
oTable.cells[i].style.backgroundColor = dragedTable_normalColor;
}

</script>
<script>
function init()
{
//注册可拖动表格
new DragedTable("tableId");
}
</script>
</HEAD>
<BODY onload="init()">
<TABLE width="90%" align="center">
<TR>
<TD  width ="40%" >
<TABLE id="tableId" width="100%" align="center"  border="1px">
<TR>
<TD>中国</TD>
</TR>
<TR>
<TD>美国</TD>
</TR>
<TR>
<TD>英国</TD>
</TR>
<TR>
<TD>加拿大</TD>
</TR>
</TABLE>
</TD>

<TD  width="60%" >
<TABLE id="targetTableId" width="100%" align="center"  border="1px">
<TR>
<TD width="50%"></TD>
<TD width="50%">CHINA</TD>
</TR>
<TR>
<TD width="50%"></TD>
<TD width="50%">USA</TD>
</TR>
<TR>
<TD width="50%"></TD>
<TD width="50%">EN</TD>
</TR>
<TR>
<TD width="50%"></TD>
<TD width="50%">CANADA</TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>
分享到:
评论

相关推荐

    js表格拖拽

    js表格拖拽效果,可以将tr拖动到表格的任意一行,实现用户自定义tr的排列

    JQ JS javascript 拖拽 排序功能 列表排序 菜单排序 表格排序

    在本主题中,我们将深入探讨如何利用jQuery和JavaScript实现拖拽排序功能,适用于列表、菜单和表格等元素。 一、拖拽排序基础概念 拖拽排序是一种用户交互设计,允许用户通过鼠标拖动来改变元素的顺序。这种功能在...

    兼容主流浏览器的纯JS动态拖动表格实现行列内容交换

    项目开发中需要用到一个拖动交换表格的功能,上网搜到雅虎的一个控件,结果简单的一个拖动交换行,就要引入七八个js library,太麻烦了。就自己综合网上资源写了一个可兼容IE,firefox,Chrome,Safari和Opera等主流...

    js表格列拖动排序代码.zip

    【标题】"js表格列拖动排序代码.zip"是一个压缩包,其中包含了实现JavaScript(JS)表格列拖动排序功能的代码。这个功能允许用户通过鼠标长按表格的列头来自由地拖动和排序列,实现列之间的互换,同时提供升序或降序...

    js表格拖拽.txt

    从给定的文件信息来看,这是一段关于JavaScript实现表格拖拽功能的代码片段,主要涉及到HTML、CSS以及JavaScript的运用。下面将详细解析这段代码中的关键知识点。 ### 关键知识点解析 #### 1. HTML与DTD声明 ```...

    JS可拖动排序的表格

    JS(JavaScript)作为一种强大的客户端脚本语言,被广泛用于实现各种动态效果和用户交互,其中包括可拖动和排序的表格功能。这种功能允许用户通过鼠标拖放操作来改变表格中行或列的顺序,提升数据管理的便捷性。下面...

    原生javascript实现拖拽改变table表格行高(html)

    标题提到的“原生javascript实现拖拽改变table表格行高”是一项技术挑战,因为大部分在线资源都集中在改变列宽上,而对行高的调整相对较少。 首先,我们需要理解HTML表格的基本结构。表格由`&lt;table&gt;`元素定义,内部...

    js实现html表格列宽可拖拽修改

    js实现html表格列宽可拖拽修改 .

    表格列自由拖动排序js代码

    这款"表格列自由拖动排序js代码"提供了这样一个功能,允许用户通过单击并长按表格的列头来自由移动列的位置,从而根据需要调整表格的布局。同时,它还支持点击表格头部进行数据的升序或降序排列,这在处理大量数据时...

    js表格内容拖拽效果.zip

    "js表格内容拖拽效果.zip"这个资源提供了一种创新的解决方案,它包含了10个不同的示例,展示了如何在网页表格中实现内容的拖放功能。这种功能可以让用户通过简单的鼠标操作,自由地将表格内的数据从一个单元格移动到...

    jQuery UI表格内容拖拽代码.zip

    "jQuery UI表格内容拖拽代码"文件则包含了实现拖拽功能的JavaScript代码,供你参考和学习。 总结,jQuery UI的Draggable和Sortable组件为我们提供了强大的交互性工具,通过合理的应用,可以极大地提升用户在网页上...

    bootstrap-table.css 表格拖拽排序

    在本主题中,我们关注的是"bootstrap-table.css 表格拖拽排序",这是一种允许用户通过鼠标拖放操作来改变表格行顺序的功能。这个特性尤其适用于那些需要频繁调整数据顺序的场景,比如任务管理或者项目进度跟踪。 ...

    jQuery表格可拖动调整列宽度大小

    本主题聚焦于jQuery中的一个实用特性——表格列宽的拖动调整,这是一个提高用户体验的功能,允许用户根据需要自定义表格列的宽度。下面我们将深入探讨这个功能的实现原理和相关知识点。 首先,要实现jQuery表格列宽...

    基于Vue实现可以拖拽的树形表格

    在Vue.js框架中实现一个可拖拽的树形表格是一项技术挑战,涉及到组件设计、事件处理、数据管理和DOM操作等多个方面。Vue.js以其简洁的API和强大的响应式系统深受开发者喜爱,而添加拖拽功能则需要用到HTML5的Drag ...

    Vue3+element-plus-table-dragable(Sortable.js)实现表格拖动排序

    原创亲测至少节约小白两天时间,本人前端小白搞了好几天才实现表格拖动排序。在网上找的(vue3+sortable.js根本跑不起来)网上好多例子在vue3下根据跑不起来于是,也没有对表格排序的例子。Vuedraggable 是基于并...

    jquery插件colResizable实现表格列可拖拽伸缩表格大小

    本篇文章将深入探讨如何使用jQuery插件colResizable来实现表格列的拖拽伸缩功能,从而使用户可以根据需要调整表格的列宽,提高用户界面的可定制性和交互性。 colResizable是一个轻量级的jQuery插件,它为HTML表格...

    js可拖动排序的表格可拖动排序的表格可拖动排序的表格

    在JavaScript(简称js)开发中,创建一个可拖动排序的表格是一项常见的需求,尤其在构建交互性强的数据展示界面时。这种功能可以让用户通过直观的拖放操作来调整表格中的行顺序,从而实现数据的定制化排列。下面将...

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

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

    js拖动表格宽度

    在JavaScript(JS)中实现“拖动表格宽度”的功能,主要涉及到事件监听、DOM操作以及浏览器兼容性处理。以下是对这一技术的详细解释: 一、基础概念 1. **事件监听**:在JavaScript中,我们可以使用`...

Global site tag (gtag.js) - Google Analytics