原生js配合cookie制作保存路径的拖拽


Posted in Javascript onDecember 29, 2015

主要是运用了原生js封装了一个cookie,然后使用了三个事件做拖拽,分别是onmousedown,onmousemove,onmouseup,这三个事件其中两个需要添加事件对象,也就是event,事件对象是一个不兼容的东西,所以需要处理兼容性的问题,也就是oEvent = ev || event; 通过事件对象,获取鼠标点击屏幕时的那个点,然后减去被拖拽物体距离左边的一个距离,最终就可以获取到当前点击位置距离物体的距离。

最后在onmouseup的时候做了一个return false,主要是为了阻止在高版本浏览器下选中文字。通过cookie里面的addCookie方法,把物体拖动停止时的位置存在了cookie里面,然后在页面加载的时候就调用getCookie方法,取到物体所在的位置,也就做了一个用cookie存位置的拖拽。

如有下边的html:

<div id="drag">拖动我</div>

CSS:

#drag{width: 100px; height: 100px; background: red; position: absolute; top: 0; left: 0;cursor:move;}

使用用js实现拖动的代码如下:

function addCookie(name, value, iDay) {
  var oDate = new Date();
  oDate.setDate(oDate.getDate() + iDay);
  document.cookie = name + '=' + value + '; path=/; expires=' + oDate;
}

function getCookie(name) {
  var arr = document.cookie.split('; ');
  for (var i = 0; i < arr.length; i++) {
    var arr2 = arr[i].split('=');

    return (arr2[0] == name) && arr2[1]
  }
  return '';
}

window.onload = function () {
  var oDiv = document.getElementById('drag');
  drag(oDiv);

  var move_by = getCookie('move_cood');
  if (move_by) {
    var str = eval('(' + move_by + ')');

    oDiv.style.left = str[0] + 'px';
    oDiv.style.top = str[1] + 'px';
  }

  function drag(obj) {
    obj.onmousedown = function (ev) {
      var oEvent = ev || event;
      var disX = oEvent.clientX - obj.offsetLeft,
  disY = oEvent.clientY - obj.offsetTop;

      document.onmousemove = function (ev) {
        var oEvent = ev || event;

        obj.style.left = oEvent.clientX - disX + 'px';
        obj.style.top = oEvent.clientY - disY + 'px';
      };

      document.onmouseup = function () {
        document.onmousemove = null;
        document.onmouseup = null;

        obj.releaseCapture && obj.releaseCapture();

        addCookie('move_cood', '[' + obj.offsetLeft + ',' + obj.offsetTop + ']', 10);
      };

      obj.setCapture && obj.setCapture();
      return false;
    };
  }
};

以上就是原生js配合cookie制作保存路径的拖拽实现效果,希望对大家的学习有所启发。

Javascript 相关文章推荐
javascript下有关dom以及xml节点访问兼容问题
Nov 26 Javascript
js 链式延迟执行DOME
Jan 04 Javascript
TypeError document.getElementById(...) is null错误原因
May 18 Javascript
jQuery调用WebMethod(PageMethod) NET2.0的方法
Apr 15 Javascript
jQuery Mobile动态刷新页面样式的实现方法
May 28 Javascript
window.open打开窗口被拦截的快速解决方法
Aug 04 Javascript
自动化测试读写64位操作系统的注册表
Aug 15 Javascript
Angular2使用Guard和Resolve进行验证和权限控制
Apr 24 Javascript
微信小程序 地图map实例详解
Jun 07 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
Mar 28 Javascript
微信小程序实现折叠与展开文章功能
Jun 12 Javascript
JavaScript格式化json和xml的方法示例
Jan 22 Javascript
一种新的javascript对象创建方式Object.create()
Dec 28 #Javascript
JavaScrip常见的一些算法总结
Dec 28 #Javascript
简单介绍JavaScript数据类型之隐式类型转换
Dec 28 #Javascript
Bootstrap导航栏各元素操作方法(表单、按钮、文本)
Dec 28 #Javascript
Bootstrap实现响应式导航栏效果
Dec 28 #Javascript
基于jQuery实现选取月份插件附源码下载
Dec 28 #Javascript
浅析AngularJs HTTP响应拦截器
Dec 28 #Javascript
You might like
用PHP进行MySQL删除记录操作代码
2008/06/07 PHP
PHP数据类型的总结分析
2013/06/13 PHP
PHP将XML转数组过程详解
2013/11/13 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
2017/03/02 PHP
javascript操作文本框readOnly
2007/05/15 Javascript
Javascript 继承机制的实现
2009/08/12 Javascript
JavaScript 页面坐标相关知识整理
2010/01/09 Javascript
javascript中onclick(this)用法介绍
2013/04/19 Javascript
删除条目时弹出的确认对话框
2014/06/05 Javascript
jQuery html()方法使用不了无法显示内容的问题
2014/08/06 Javascript
使用Nodejs开发微信公众号后台服务实例
2014/09/03 NodeJs
判断在css加载完毕后执行后续代码示例
2014/09/03 Javascript
基于javascript实现单选及多选的向右和向左移动实例
2015/07/25 Javascript
javascript弹出窗口实现代码
2015/11/12 Javascript
lhgcalendar时间插件限制只能选择三个月的实现方法
2017/07/03 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
2017/09/06 Javascript
详解在微信小程序的JS脚本中使用Promise来优化函数处理
2019/03/06 Javascript
JQuery Ajax跨域调用和非跨域调用问题实例分析
2019/04/16 jQuery
vue获取时间戳转换为日期格式代码实例
2019/04/17 Javascript
微信小程序实现的绘制table表格功能示例
2019/04/26 Javascript
解决mui框架中switch开关通过js控制开或者关状态时小圆点不动的问题
2019/09/03 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
使用pandas对矢量化数据进行替换处理的方法
2018/04/11 Python
python实现狄克斯特拉算法
2019/01/17 Python
学习python可以干什么
2019/02/26 Python
Django中自定义模型管理器(Manager)及方法
2019/09/23 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
2020/06/10 Python
导致python中import错误的原因是什么
2020/07/01 Python
Python基础教程之输入输出和运算符
2020/07/26 Python
Servlet的生命周期
2013/08/25 面试题
高中毕业自我评价
2014/02/08 职场文书
一年级学生评语大全
2014/04/21 职场文书
平面设计师岗位职责
2014/09/18 职场文书
MySQL创建管理KEY分区
2022/04/13 MySQL
浅谈Redis缓冲区机制
2022/06/05 Redis