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 相关文章推荐
有效的捕获JavaScript焦点的方法小结
Oct 08 Javascript
jQuery中大家不太了解的几个方法
Mar 04 Javascript
JavaScript在浏览器标题栏上显示当前日期和时间的方法
Mar 19 Javascript
JS基于cookie实现来宾统计记录访客信息的方法
Aug 04 Javascript
jQuery实现hover合成事件的方法
Aug 06 Javascript
简要了解jQuery移动web开发的响应式布局设计
Dec 04 Javascript
canvas实现爱心和彩虹雨效果
Mar 09 Javascript
jquery mobile实现可折叠的导航按钮
Mar 11 Javascript
JS仿淘宝搜索框用户输入事件的实现
Jun 19 Javascript
Vue下滚动到页面底部无限加载数据的示例代码
Apr 22 Javascript
基于jquery实现的tab选项卡功能示例【附源码下载】
Jun 10 jQuery
JS代码触发事件代码实例
Jan 02 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
PL-880隐藏功能
2021/03/01 无线电
一个颜色轮换的简单例子
2006/10/09 PHP
PHP用mysql数据库存储session的代码
2010/03/05 PHP
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
Symfony2创建页面实例详解
2016/03/18 PHP
Docker 如何布置PHP开发环境
2016/06/21 PHP
微信随机生成红包金额算法php版
2016/07/21 PHP
Yii框架ACF(accessController)简单权限控制操作示例
2019/04/26 PHP
扩展Jquery插件处理mouseover时内部有子元素时发生样式闪烁
2011/12/08 Javascript
配置Grunt的Task时通配符支持和动态生成文件名问题
2015/09/06 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
2017/03/01 Javascript
Bootstrap.css与layDate日期选择样式起冲突的解决办法
2017/04/07 Javascript
vue使用axios上传文件(FormData)的方法
2019/04/14 Javascript
Vue中实现权限控制的方法示例
2019/06/07 Javascript
js定义类的方法示例【ES5与ES6】
2019/07/30 Javascript
Vue3为什么这么快
2020/09/23 Javascript
将Django框架和遗留的Web应用集成的方法
2015/07/24 Python
Python统计文件中去重后uuid个数的方法
2015/07/30 Python
python 3.5实现检测路由器流量并写入txt的方法实例
2017/12/17 Python
1 行 Python 代码快速实现 FTP 服务器
2018/01/25 Python
对Python中TKinter模块中的Label组件实例详解
2019/06/14 Python
python获取Linux发行版名称
2019/08/30 Python
JACK & JONES英国官方网站:欧洲领先的男装生产商
2017/09/27 全球购物
波兰办公用品和学校用品在线商店:Dlabiura24.pl
2020/11/18 全球购物
Love, Bonito国际官网:新加坡女装品牌
2021/03/13 全球购物
一份比较全的PHP面试题
2016/07/29 面试题
请解释一下webService? 如何用.net实现webService
2014/06/09 面试题
laravel使用redis队列实例讲解
2021/03/23 PHP
前台文员的岗位职责
2013/11/14 职场文书
幼儿园托班开学寄语
2014/01/18 职场文书
节约用水标语
2014/06/11 职场文书
法定代表人授权委托书格式
2014/10/14 职场文书
《用字母表示数》教学反思
2016/02/17 职场文书
简单实现一个手持弹幕功能+文字抖动特效
2021/03/31 HTML / CSS
springboot 启动如何排除某些bean的注入
2021/08/02 Java/Android
Python语法学习之进程的创建与常用方法详解
2022/04/08 Python