JS实现的自定义网页拖动类


Posted in Javascript onNovember 06, 2015

本文实例讲述了JS实现的自定义网页拖动类。分享给大家供大家参考,具体如下:

先来看运行效果截图如下:

JS实现的自定义网页拖动类

在线演示地址如下:

具体代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>自写的拖动类……</title>
<script type="text/javascript">
var d=document;//给document对象一个通用的事件侦听方法
d.addListener=function(e,f,b){
 this.attachEvent?this.attachEvent('on'+e,f):this.addEventListener(e,f,b);
}
d.removeListener=function(e,f,b){
 this.detachEvent?this.detachEvent('on'+e,f):this.removeEventListener(e,f,b);
}
function $(){//接收一个id参数,返回带有startDrag方法的对象
 var o=document.getElementById(arguments[0]);
 o.addListener=function(e,f,b){
  this.attachEvent?this.attachEvent('on'+e,f):this.addEventListener(e,f,b);
 }
 o.removeListener=function(e,f,b){
  this.detachEvent?this.detachEvent('on'+e,f):this.removeEventListener(e,f,b);
 }
 o.startDrag=function(obj){//参数obj默认为o本身,可以传其它参数以确定要移动的对象
  var obj=obj?obj:o;
  var sx,sy;
  o.style.cursor="move";
  o.addListener("mousedown",function(e){
   e||event;
   if(e.button==1||e.button==0){
    sx=e.clientX-obj.offsetLeft;sy=e.clientY-obj.offsetTop;
    d.addListener("mousemove",move,false);
    d.addListener("mouseup",stopDrag,false);
   }
  },false);
  var stopDrag=function(){
   d.removeListener("mousemove",move,false);
   d.removeListener("mouseup",stopDrag,false);
  }
  var move=function(e){
   e||event;
   window.getSelection ? window.getSelection().removeAllRanges() :
    document.selection.empty();
   if(e.preventDefault)e.preventDefault();//这两句便是解决firefox拖动问题的.
   with (obj.style){
    position="absolute"
    left=e.clientX-sx+"px";
    top=e.clientY-sy+"px";
   }
  }
 }
 return o; 
}
window.onload=function(){$("ok").startDrag($("os"))}//本例中拖动ok元素,移动其父元素
</script>
<style type="text/css">
*{margin:0;padding:0}
#ok{width:215px;height:170px;background:url(images/sample1.gif)}
#os{width:400px;height:300px;background:#09f;left:300px}
#os2{width:400px;height:300px;background:#f90;}
</style>
</head>
<body>
<div id="os"><p id="ok"></p></div>
<div id="os2"></div>
</body>
</html>

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
9款2014最热门jQuery实用特效推荐
Dec 07 Javascript
Javascript实现检测客户端类型代码封包
Dec 03 Javascript
jQuery中$.ajax()方法参数解析
Oct 22 Javascript
Bootstrap modal 多弹窗之叠加关闭阴影遮罩问题的解决方法
Feb 27 Javascript
简单实现JS上传图片预览功能
Apr 14 Javascript
详解react服务端渲染(同构)的方法
Sep 21 Javascript
原生javascript实现文件异步上传的实例讲解
Oct 26 Javascript
vue2.0+vuex+localStorage代办事项应用实现详解
May 31 Javascript
简单两步使用node发送qq邮件的方法
Mar 01 Javascript
浅谈JS中几种轻松处理'this'指向方式
Sep 16 Javascript
jQuery实现的解析本地 XML 文档操作示例
Apr 30 jQuery
如何使用vue slot创建一个模态框的实例代码
May 24 Javascript
js基础知识(公有方法、私有方法、特权方法)
Nov 06 #Javascript
JS实现的N多简单无缝滚动代码(包含图文效果)
Nov 06 #Javascript
javascript中的altKey 和 Event属性大全
Nov 06 #Javascript
JS日期加减,日期运算代码
Nov 05 #Javascript
程序员必知35个jQuery 代码片段
Nov 05 #Javascript
js如何实现淡入淡出效果
Nov 18 #Javascript
JavaScript数组去重的五种方法
Nov 05 #Javascript
You might like
根德YB400的电路分析
2021/03/02 无线电
在Ubuntu 14.04上部署 PHP 环境及 WordPress
2014/09/02 PHP
laravel自定义分页效果
2017/07/23 PHP
php ajax数据传输和响应方法
2018/08/21 PHP
PHP读取目录树的实现方法分析
2019/03/22 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
php获取小程序码的实现代码(B类接口)
2020/06/13 PHP
JS实现打开本地文件或文件夹
2021/03/09 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
2011/12/26 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
Nodejs中自定义事件实例
2014/06/20 NodeJs
BootStrap tab选项卡使用小结
2020/08/09 Javascript
微信小程序 简单教程实例详解
2017/01/13 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
2019/12/18 Javascript
vue实现图片懒加载的方法分析
2020/02/05 Javascript
[43:51]2014 DOTA2国际邀请赛中国区预选赛 Dream Times VS TongFu
2014/05/22 DOTA
[01:25:09]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第二场
2014/05/24 DOTA
[01:14]DOTA2亚洲邀请赛 ShowOpen
2015/02/07 DOTA
[02:16]2018年度CS GO最具人气选手-完美盛典
2018/12/16 DOTA
推荐下python/ironpython:从入门到精通
2007/10/02 Python
python 七种邮件内容发送方法实例
2014/04/22 Python
python在指定目录下查找gif文件的方法
2015/05/04 Python
Python人脸识别初探
2017/12/21 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
2019/02/28 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
2020/03/25 Python
python爬虫如何解决图片验证码
2021/02/14 Python
New Balance英国官方网站:始于1906年,百年慢跑品牌
2016/12/07 全球购物
阿玛尼美妆加拿大官方商城:Giorgio Armani Beauty加拿大
2017/10/24 全球购物
自考毕业自我鉴定
2014/03/18 职场文书
2014年安全员工作总结
2014/11/13 职场文书
2015年化验室工作总结
2015/04/23 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
股东协议书范本2016
2016/03/21 职场文书
css实现左上角飘带效果的完整代码
2022/03/18 HTML / CSS
Spring Bean是如何初始化的详解
2022/03/22 Java/Android