原生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 相关文章推荐
3种Jquery限制文本框只能输入数字字母的方法
Dec 03 Javascript
javascript实现获取浏览器版本、操作系统类型
Jan 29 Javascript
Eclipse编辑jsp、js文件时卡死现象的解决办法汇总
Feb 02 Javascript
jquery拖拽排序简单实现方法(效果增强版)
Feb 16 Javascript
AngularJS中transclude用法详解
Nov 03 Javascript
微信小程序图片自适应支持多图实例详解
Jun 21 Javascript
javascript观察者模式实现自动刷新效果
Sep 05 Javascript
微信小程序表单验证form提交错误提示效果
Jun 19 Javascript
Vue父子组件双向绑定传值的实现方法
Jul 31 Javascript
vue-cli脚手架的安装教程图解
Sep 02 Javascript
javascript原型链学习记录之继承实现方式分析
May 01 Javascript
JS自定义滚动条效果
Mar 13 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
中东人咖啡哲学
2021/03/03 咖啡文化
ThinkPHP实现带验证码的文件上传功能实例
2014/11/01 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
2016/05/18 PHP
在Laravel中使用MongoDB的方法示例
2019/11/11 PHP
从URL中提取参数与将对象转换为URL查询参数的实现代码
2012/01/12 Javascript
利用CSS、JavaScript及Ajax实现高效的图片预加载
2013/10/16 Javascript
JavaScript中定义函数的三种方法
2015/03/12 Javascript
JavaScript中的函数声明和函数表达式区别浅析
2015/03/27 Javascript
JS实现转动随机数抽奖特效代码
2020/04/16 Javascript
JavaScript中的闭包
2016/02/24 Javascript
js实现密码强度检测【附示例】
2016/03/30 Javascript
基于JQuery实现分隔条的功能
2016/06/17 Javascript
JavaScript数据结构之二叉树的查找算法示例
2017/04/13 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
2017/06/04 Javascript
微信小程序显示倒计时功能示例【测试可用】
2018/12/03 Javascript
详解JavaScript实现动态的轮播图效果
2019/04/29 Javascript
extjs图形绘制之饼图实现方法分析
2020/03/06 Javascript
跟老齐学Python之从if开始语句的征程
2014/09/14 Python
如何用itertools解决无序排列组合的问题
2017/05/18 Python
Python利用pandas计算多个CSV文件数据值的实例
2018/04/19 Python
用Python将一个列表分割成小列表的实例讲解
2018/07/02 Python
Random 在 Python 中的使用方法
2018/08/09 Python
Django实现表单验证
2018/09/08 Python
Python中如何导入类示例详解
2019/04/17 Python
python笔记之mean()函数实现求取均值的功能代码
2019/07/05 Python
Python线程障碍对象Barrier原理详解
2019/12/02 Python
python ffmpeg任意提取视频帧的方法
2020/02/21 Python
Python对称的二叉树多种思路实现方法
2020/02/28 Python
sklearn中的交叉验证的实现(Cross-Validation)
2021/02/22 Python
详解Python openpyxl库的基本应用
2021/02/26 Python
c++工程师面试问题
2013/08/04 面试题
区域销售经理岗位职责
2013/12/10 职场文书
法人授权委托书
2014/09/16 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
MySQL基础(二)
2021/04/05 MySQL
mysql的MVCC多版本并发控制的实现
2021/04/14 MySQL