JavaScript使用面向对象实现的拖拽功能详解


Posted in Javascript onJune 12, 2019

本文实例讲述了JavaScript使用面向对象实现的拖拽功能。分享给大家供大家参考,具体如下:

面向对象有个前提:

  • 前提:所有东西都必须包含在onload里
  • 改写:不能有函数嵌套,可以有全局变量
  • 过程,如下
    • onload改成构造函数,
    • 全局变量改成属性(通过this)
    • 函数改写成方法
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>面向对象的继承-1</title>
<style>
#div1 {width: 100px; height: 100px; background: red; position: absolute;}
</style>
<script>
window.onload = function() {
  var oDiv = document.getElementById('div1');
  oDiv.onmousedown = function(ev) {
    var ev = ev || event;
    var disX = ev.clientX - this.offsetLeft;
    var disY = ev.clientY - this.offsetTop;
    document.onmousemove = function(ev) {
      var ev = ev || event;
      oDiv.style.left = ev.clientX - disX + 'px';
      oDiv.style.top = ev.clientY - disY + 'px';
    }
    document.onmouseup = function() {
      document.onmousemove = document.onmouseup = null;
    }
  }
}
</script>
</head>
<body>
  <div id="div1"></div>
</body>
</html>

把局部变量改成全局变量

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>面向对象的继承-2</title>
<style>
#div1 {width: 100px; height: 100px; background: red; position: absolute;}
</style>
<script>
var oDiv=null;
var disX=0;
var disY=0;
window.onload = function() {
  oDiv = document.getElementById('div1');
  oDiv.onmousedown = fnDown;
}
function fnMove(ev) {
  var ev = ev || event;
  oDiv.style.left = ev.clientX - disX + 'px';
  oDiv.style.top = ev.clientY - disY + 'px';
}
function fnUp() {
  document.onmousemove = document.onmouseup = null;
}
function fnDown(ev) {
  var ev = ev || event;
  disX = ev.clientX - this.offsetLeft;
  disY = ev.clientY - this.offsetTop;
  document.onmousemove = fnMove;
  document.onmouseup =fnUp;
}
</script>
</head>
<body>
  <div id="div1"></div>
</body>
</html>

引用块内容

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>面向对象的继承-2</title>
<style>
#div1 {width: 100px; height: 100px; background: red; position: absolute;}
#div2 {width: 100px; height: 100px; background: red; position: absolute;top:120px;}
</style>
<script>
window.onload=function(){
  new Drag('div1');
  new Drag('div2');
}
function Drag(id) {
  var _this=this;
  this.disX=0;
  this.disY=0;
  this.oDiv = document.getElementById(id);
  this.oDiv.onmousedown = function(){
    _this.fnDown()
  };
}
Drag.prototype.fnDown=function (ev) {
  var ev = ev || event;
  var _this=this;
  this.disX = ev.clientX - this.oDiv.offsetLeft;
  this.disY = ev.clientY - this.oDiv.offsetTop;
  document.onmousemove = function(){
    _this.fnMove();
  };
  document.onmouseup =function(){
    _this.fnUp();
  };
}
Drag.prototype.fnMove=function(ev) {
  var ev = ev || event;
  this.oDiv.style.left = ev.clientX - this.disX + 'px';
  this.oDiv.style.top = ev.clientY - this.disY + 'px';
}
Drag.prototype.fnUp=function () {
  document.onmousemove = null;
  document.onmouseup = null
}
</script>
</head>
<body>
  <div id="div1"></div>
  <div id="div2"></div>
</body>
</html>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>面向对象的继承-2</title>
<style>
#div1 {width: 100px; height: 100px; background: red; position: absolute;}
#div2 {width: 100px; height: 100px; background: red; position: absolute;top:120px;}
</style>
<script>
window.onload=function(){
  new Drag('div1');
  new Drag('div2');
}
function Drag(id) {
  var _this=this;
  this.disX=0;
  this.disY=0;
  this.oDiv = document.getElementById(id);
  this.oDiv.onmousedown = function(){
    _this.fnDown()
  };
}
Drag.prototype.fnDown=function (ev) {
  var ev = ev || event;
  var _this=this;
  this.disX = ev.clientX - this.oDiv.offsetLeft;
  this.disY = ev.clientY - this.oDiv.offsetTop;
  document.onmousemove = function(){
    _this.fnMove();
  };
  document.onmouseup =function(){
    _this.fnUp();
  };
}
Drag.prototype.fnMove=function(ev) {
  var ev = ev || event;
  this.oDiv.style.left = ev.clientX - this.disX + 'px';
  this.oDiv.style.top = ev.clientY - this.disY + 'px';
}
Drag.prototype.fnUp=function () {
  document.onmousemove = null;
  document.onmouseup = null
}
</script>
</head>
<body>
  <div id="div1"></div>
  <div id="div2"></div>
</body>
</html>

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试一下运行效果。

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

Javascript 相关文章推荐
日历查询的算法 如何计算某一天是星期几
Dec 12 Javascript
js 一个关于图片onload加载的事
Nov 10 Javascript
Linux下编译安装php libevent扩展实例
Feb 14 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
May 30 Javascript
JavaScript的this关键字的理解
Jun 18 Javascript
很棒的js选项卡切换效果
Jul 15 Javascript
AngularJS 依赖注入详解和简单实例
Jul 28 Javascript
Web纯前端“旭日图”实现元素周期表
Mar 10 Javascript
vue配置多页面的实现方法
May 22 Javascript
vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
May 10 Javascript
React精髓!一篇全概括小结(急速)
May 23 Javascript
JS实现简易日历效果
Jan 25 Javascript
JS实现点击生成UUID的方法完整实例【基于jQuery】
Jun 12 #jQuery
小程序组件之自定义顶部导航实例
Jun 12 #Javascript
vue项目中将element-ui table表格写成组件的实现代码
Jun 12 #Javascript
React 全自动数据表格组件——BodeGrid的实现思路
Jun 12 #Javascript
详解如何提升JSON.stringify()的性能
Jun 12 #Javascript
基于vue-cli搭建多模块且各模块独立打包的项目
Jun 12 #Javascript
浅谈webpack 四个核心概念之Entry
Jun 12 #Javascript
You might like
Linux下PHP安装mcrypt扩展模块笔记
2014/09/10 PHP
使用PHP生成PDF方法详解
2015/01/23 PHP
PHP实现websocket通信的方法示例
2018/08/28 PHP
javascript 对表格的行和列都能加亮显示
2008/12/26 Javascript
JavaScript 轻松搞定快捷留言功能 只需一行代码
2010/04/01 Javascript
js简单实现HTML标签Select联动带跳转
2013/10/23 Javascript
jQuery 实现自动填充邮箱功能(带下拉提示)
2014/10/14 Javascript
Javascript中3个需要注意的运算符
2015/04/02 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
2015/06/23 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形菜单
2015/11/30 Javascript
Bootstrap中data-target 到底是什么
2017/02/14 Javascript
webpack3+React 的配置全解
2017/08/21 Javascript
使用JavaScript实现点击循环切换图片效果
2017/09/03 Javascript
原生js实现简单的模态框示例
2017/09/08 Javascript
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
2018/01/25 jQuery
vue实现组件之间传值功能示例
2018/07/13 Javascript
js+html5实现手机九宫格密码解锁功能
2018/07/30 Javascript
详解基于Vue2.0实现的移动端弹窗(Alert, Confirm, Toast)组件
2018/08/02 Javascript
vue项目中引入vue-datepicker插件的详解
2019/05/14 Javascript
在微信小程序中使用vant的方法
2019/06/07 Javascript
Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
2015/04/08 Python
Python常用的内置序列结构(列表、元组、字典)学习笔记
2016/07/08 Python
python使用正则筛选信用卡
2019/01/27 Python
学生信息管理系统Python面向对象版
2019/01/30 Python
Python-Seaborn热图绘制的实现方法
2019/07/15 Python
通过实例解析python描述符原理作用
2020/01/22 Python
keras中的backend.clip用法
2020/05/22 Python
关于Python错误重试方法总结
2021/01/03 Python
HTML5 progress和meter控件_动力节点Java学院整理
2017/07/06 HTML / CSS
英国简约舒适女装品牌:Great Plains
2018/07/27 全球购物
洲际酒店集团英国官网:IHG英国
2019/07/10 全球购物
工商管理专业应届生求职信
2013/11/04 职场文书
学校教师读书活动总结
2014/07/08 职场文书
幼儿园大班开学寄语
2014/08/02 职场文书
2014年国庆晚会主持词
2014/09/19 职场文书
六年级数学教学反思
2016/02/16 职场文书