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 相关文章推荐
javascript中数组中求最大值示例代码
Dec 18 Javascript
JavaScript定义类的几种方式总结
Jan 06 Javascript
jQuery判断多个input file 都不能为空的例子
Jun 23 Javascript
js实现选中复选框文字变色的方法
Aug 14 Javascript
使用Javascript实现选择下拉菜单互移并排序
Feb 23 Javascript
JQuery 两种方法解决刚创建的元素遍历不到的问题
Apr 13 Javascript
功能强大的Bootstrap效果展示(二)
Aug 03 Javascript
微信小程序实现收藏与取消收藏切换图片功能
Aug 03 Javascript
jquery分页插件pagination使用教程
Oct 23 jQuery
ES6中new Function()语法及应用实例分析
Feb 19 Javascript
vue实现公告栏文字上下滚动效果的示例代码
Jun 16 Javascript
JavaScript 中的六种循环方法
Jan 06 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
杏林同学录(三)
2006/10/09 PHP
PHP编程风格规范分享
2014/01/15 PHP
PHP错误处理函数
2016/04/03 PHP
PHP判断JSON对象是否存在的方法(推荐)
2016/07/06 PHP
微信支付扫码支付php版
2016/07/22 PHP
jQuery的一些特性和用法整理小结
2010/01/13 Javascript
Node.js操作mysql数据库增删改查
2016/03/30 Javascript
Bootstrap Img 图片样式(推荐)
2016/12/13 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
Vue.js 2.0 移动端拍照压缩图片上传预览功能
2017/03/06 Javascript
js如何编写简单的ajax方法库
2017/08/02 Javascript
JS简单实现数组去重的方法分析
2017/10/14 Javascript
axios进阶实践之利用最优雅的方式写ajax请求
2017/12/20 Javascript
深入理解Node内建模块和对象
2019/03/12 Javascript
vue中使用 pako.js 解密 gzip加密字符串的方法
2019/06/10 Javascript
解决vue打包后vendor.js文件过大问题
2019/07/03 Javascript
vue 中几种传值方法(3种)
2019/11/12 Javascript
JS函数基本定义与用法示例
2020/01/15 Javascript
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
python获取从命令行输入数字的方法
2015/04/29 Python
web.py在SAE中的Session问题解决方法(使用mysql存储)
2015/06/24 Python
Python 爬虫学习笔记之单线程爬虫
2016/09/21 Python
python 去除txt文本中的空格、数字、特定字母等方法
2018/07/24 Python
python创建文件时去掉非法字符的方法
2018/10/31 Python
运用Python的webbrowser实现定时打开特定网页
2019/02/21 Python
Django之模板层的实现代码
2019/09/09 Python
Python3 requests模块如何模仿浏览器及代理
2020/06/15 Python
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
2016/03/22 HTML / CSS
亚洲最大旅游体验平台:KKday
2017/10/21 全球购物
印度首选时尚目的地:Reliance Trends
2018/01/17 全球购物
Rowdy Gentleman服装和配饰:美好时光
2019/09/24 全球购物
销售顾问岗位职责
2014/02/25 职场文书
学雷锋演讲稿
2014/03/04 职场文书
没有孩子的离婚协议书怎么写
2014/09/17 职场文书
2016年寒假政治学习心得体会
2015/10/09 职场文书
浅析InnoDB索引结构
2021/04/05 MySQL