js实现横向拖拽导航条功能


Posted in Javascript onFebruary 17, 2017

效果如下:

js实现横向拖拽导航条功能

代码如下:

<!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="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >导航一</a></li>
  <li class="drag"><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >导航二导航</a></li>
  <li class="drag"><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >导航导航导航三</a></li>
  <li class="drag"><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >导航导航四</a></li>
  <li class="drag"><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >导五</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>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
基于JQuery的类似新浪微博展示信息效果的代码
Jul 23 Javascript
不使用浏览器运行javascript代码的方法
Jul 24 Javascript
css样式标签和js语法属性区别
Nov 06 Javascript
弹出最简单的模式化遮罩层的js代码
Dec 04 Javascript
Javascript Objects详解
Sep 04 Javascript
JS数组array元素的添加和删除方法代码实例
Jun 01 Javascript
JavaScript prototype属性详解
Oct 25 Javascript
集成vue到jquery/bootstrap项目的方法
Feb 10 jQuery
vue-cli webpack配置文件分析
May 20 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
May 21 Javascript
Layui 导航默认展开和菜单栏选中高亮设置的方法
Sep 04 Javascript
js实现点击图片在屏幕中间弹出放大效果
Sep 11 Javascript
js转换对象为xml
Feb 17 #Javascript
EsLint入门学习教程
Feb 17 #Javascript
使用bat打开多个cmd窗口执行gulp、node
Feb 17 #Javascript
AngularJS执行流程详解
Feb 17 #Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
Feb 17 #Javascript
bootstrap Validator 模态框、jsp、表单验证 Ajax提交功能
Feb 17 #Javascript
走进AngularJs之过滤器(filter)详解
Feb 17 #Javascript
You might like
制作个性化的WordPress登陆界面的实例教程
2016/05/21 PHP
php 生成Tab键或逗号分隔的CSV
2016/09/24 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
2017/10/19 PHP
类之Prototype.js学习
2007/06/13 Javascript
CSS+Jquery实现页面圆角框方法大全
2009/12/24 Javascript
JavaScript DOM 学习第九章 选取范围的介绍
2010/02/19 Javascript
两个JavaScript jsFiddle JSBin在线调试器
2010/03/14 Javascript
纯js写的分页表格数据为json串
2014/02/18 Javascript
window.location不跳转的问题解决方法
2014/04/17 Javascript
Javascript玩转继承(三)
2014/05/08 Javascript
JS数组(Array)处理函数整理
2014/12/07 Javascript
JavaScript实现N皇后问题算法谜题解答
2014/12/29 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
微信小程序http连接访问解决方案的示例
2018/11/05 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
Javascript Worker子线程代码实例
2020/02/20 Javascript
在vue项目中 实现定义全局变量 全局函数操作
2020/10/26 Javascript
[49:17]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第三场 1月26日
2021/03/11 DOTA
Python实现的一个找零钱的小程序代码分享
2014/08/25 Python
python随机取list中的元素方法
2018/04/08 Python
用Django写天气预报查询网站
2018/10/21 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
python3 selenium自动化测试 强大的CSS定位方法
2019/08/23 Python
Django Auth用户认证组件实现代码
2020/10/13 Python
CSS3实现王者荣耀匹配人员加载页面的方法
2019/04/16 HTML / CSS
Debenhams百货英国官方网站:Debenhams UK
2016/07/12 全球购物
安德玛加拿大官网:Under Armour加拿大
2019/10/02 全球购物
Orlebar Brown官网:设计师泳裤和泳装
2020/12/08 全球购物
华为c/c++笔试题
2016/01/25 面试题
硕士生工作推荐信
2014/03/07 职场文书
小学生勤俭节约演讲稿
2014/08/28 职场文书
2015年入党决心书
2015/02/05 职场文书
2016中考冲刺决心书
2015/09/22 职场文书
在pycharm中无法import所安装的库解决方案
2021/05/31 Python
MySQL8.0的WITH查询详情
2021/08/30 MySQL
Mysql 8.x 创建用户以及授予权限的操作记录
2022/04/18 MySQL