首页 / 知识
Html+css实现拖拽导航条
2023-04-11 16:03:00

<!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <title>div横向拖拽排序</title> <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> <style type="text/css"> body, div { padding: 0px; margin: 0px; }
.box { position: relative; margin-left: 15px; padding: 10px; padding-right: 0px; width: 810px; border: blue solid 1px; } .box ul{ list-style: none; overflow: hidden; padding: 0; margin:0; } .drag { float: left; border: #000 solid 1px; text-align: center; } .box ul li a{ display: block; padding: 10px 25px; } .drag-dash { position: absolute; border: #000 solid 1px; background: #ececec; }
.dash { float: left; border: 1px solid transparent; } </style> </head> <body> <h1>div横向拖拽排序</h1> <div class="box"> <ul> <li class="drag"><a href="#">导航一</a></li> <li class="drag"><a href="#">导航二导航</a></li> <li class="drag"><a href="#">导航导航导航三</a></li> <li class="drag"><a href="#">导航导航四</a></li> <li class="drag"><a href="#">导五</a></li> </ul> </div>
<script type="text/javascript"> $(document).ready(function () { var range = {x: 0, y: 0};//鼠标元素偏移量 var lastPos = {x: 0, y: 0, x1: 0, y1: 0}; //拖拽对象的四个坐标 var tarPos = {x: 0, y: 0, x1: 0, y1: 0}; //目标元素对象的坐标初始化 var theDiv = null, move = false; var choose = false; //拖拽对象 拖拽状态 选中状态 var theDivId = 0, theDivHeight = 0, theDivHalf = 0; var tarFirstY = 0; //拖拽对象的索引、高度、的初始化。 var tarDiv = null, tarFirst, tempDiv; //要插入的目标元素的对象, 临时的虚线对象 var initPos = {x: 0, y: 0}; var theDivWidth;//拖拽对象的宽度 $(".drag").each(function () { $(this).mousedown(function (event) { choose = true; //拖拽对象 theDiv = $(this); //记录拖拽元素初始位置 initPos.x = theDiv.position().left; initPos.y = theDiv.position().top; //鼠标元素相对偏移量 range.x = event.pageX - theDiv.position().left; range.y = event.pageY - theDiv.position().top; theDivId = theDiv.index(); theDivWidth = theDiv.width(); theDivHalf = theDivWidth / 2; theDiv.removeClass("drag"); theDiv.addClass("drag-dash"); theDiv.css({left: initPos.x + 'px', top: initPos.y + 'px'}); // 创建新元素 插入拖拽元素之前的位置(虚线框) $("<div class='dash'></div>").insertBefore(theDiv); tempDiv = $(".dash"); $(".dash").css("width" , theDivWidth); return false }); });
$(document).mouseup(function (event) { if (!choose) { return false; } if (!move) { //恢复对象的初始样式 theDiv.removeClass("drag-dash"); theDiv.addClass("drag");
tempDiv.remove(); // 删除新建的虚线div choose = false; return false; } theDiv.insertBefore(tempDiv); // 拖拽元素插入到 虚线div的位置上 //恢复对象的初始样式 theDiv.removeClass("drag-dash"); theDiv.addClass("drag"); tempDiv.remove(); // 删除新建的虚线div move = false; choose = false; return false }).mousemove(function (event) { if (!choose) {return false} move = true; lastPos.x = event.pageX - range.x; lastPos.y = event.pageY - range.y; lastPos.x1 = lastPos.x + theDivWidth; // 拖拽元素随鼠标移动 theDiv.css({left: lastPos.x + 'px', top: lastPos.y + 'px'}); // 拖拽元素随鼠标移动 查找插入目标元素 var $main = $('.drag'); // 局部变量:按照重新排列过的顺序 再次获取 各个元素的坐标, $main.each(function () { tarDiv = $(this); tarPos.x = tarDiv.position().left; tarPos.y = tarDiv.position().top; tarPos.x1 = tarPos.x + tarDiv.width() / 2; tarFirst = $main.eq(0); // 获得第一个元素\ tarFirstX = tarFirst.position().left + theDivHalf; // 第一个元素对象的中心纵坐标 //拖拽对象 移动到第一个位置 if (lastPos.x <= tarFirstX) { tempDiv.insertBefore(tarFirst); } //判断要插入目标元素的 坐标后, 直接插入 if (lastPos.x >= tarPos.x - theDivHalf && lastPos.x1 >= tarPos.x1) { tempDiv.insertAfter(tarDiv); } }); return false }); }); </script> </body> </html> |
最新内容
相关内容
pythonC++和Python先入门哪个比较
pythonC++和Python先入门哪个比较好?,培训,入门,python如何嵌入C/C++进行开发
python如何嵌入C/C++进行开发,培训,代码,项目,数字,工作,函数,原型,文件,目录,类型,如果你想把Python嵌入C/C++中是比较简单的事情,你需要的是pythonUTF-8编码是什么
pythonUTF-8编码是什么,代码,培训,软件,工作,数字,标准,字节,字符,汉字,字符串,pythonUTF-8编码是什么1、说明UTF-8编码,即“可变长的编码”。C ++强制转换语法样式
C ++强制转换语法样式,C ++强制转换语法样式,转换,语法,样式,哪种,C++ cast syntax styles与常规投放,static_cast和dynamic_cast相关C#和Java中的泛型与C ++中的模板有
C#和Java中的泛型与C ++中的模板有什么区别?,C#和Java中的泛型与C ++中的模板有什么区别?,泛型,错误,出了,我一直,What are the differen关于html:Windows窗体的WYSIWYG Mar
关于html:Windows窗体的WYSIWYG Markdown控件?,关于html:Windows窗体的WYSIWYG Markdown控件?,客户,应用程序,数据库,结构,A WYSIWYG Mar关于stl:应该避免哪些C ++陷阱?
关于stl:应该避免哪些C ++陷阱?,关于stl:应该避免哪些C ++陷阱?,向量,项目,学习,布尔,What C++ pitfalls should I avoid?我记得第一次学关于html:修复IE6中的页面布局
关于html:修复IE6中的页面布局,关于html:修复IE6中的页面布局,滚动条,区域,浏览,布局,Fixed page layout in IE6页眉,页脚和侧栏具有固关于java:如何使此代码与jQuery / A
关于java:如何使此代码与jQuery / Ajax一起提交UTF-8表单文本区域?,关于java:如何使此代码与jQuery / Ajax一起提交UTF-8表单文本区域关于字符串:在C ++中将布尔转换为文
关于字符串:在C ++中将布尔转换为文本,关于字符串:在C ++中将布尔转换为文本,字符串,方法,语句,变为,Converting bool to text in C++关于C ++:头文件中有多个类,而每个类
关于C ++:头文件中有多个类,而每个类中只有一个头文件,关于C ++:头文件中有多个类,而每个类中只有一个头文件,编码,公司,都有,准则,Multi关于C++:正则投射与静态投射与动态
关于C++:正则投射与静态投射与动态投射,关于C++:正则投射与静态投射与动态投射,语言,点这里,二十,从来没,Regular cast vs. static_cas