javascript实现简单的鼠标拖动效果实例


Posted in Javascript onApril 10, 2015

本文实例讲述了javascript实现简单的鼠标拖动效果。分享给大家供大家参考。具体分析如下:

用鼠标拖动一个元素,放到网页的任意一个位置上,这是很常见的,例如很多博客模板版块位置可以自己拖动到相应位置。

下面先写一个简单的可以实现鼠标拖动的效果。

当鼠标按下的时候,记录鼠标当前位置和元素左边距离的差值。
当鼠标移动的时候,给元素的位置赋值,就是鼠标的位置,减去刚才的差值。
当鼠标放开的时候,给鼠标移动和鼠标放开赋值null,让它们不要再有任何动作。

要点一:

disx = oevent.clientX - box.offsetLeft;

要确定拖动的时候鼠标点在元素的位置,就是鼠标位置减去元素的左边距离。

要点二:

box.style.left = oevent.clientX - disx + "px";

拖动时元素的位置,鼠标的当前位置减去前面刚计算的值。

好了,上代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>无标题文档</title>
<style>
body{margin:0; padding:0; height:1500px;}
#box{width:100px; height:100px; background:#06c; position:absolute;}
</style>
<script>
window.onload = function(){
 var box = document.getElementById("box");
 var disx =0;
 var disy = 0;
 box.onmousedown = function(evt){
 var oevent = evt || window.event;
 disx = oevent.clientX - box.offsetLeft;
 disy = oevent.clientY - box.offsetTop;
 document.onmousemove = function(evt){
  var oevent = evt || window.event;
  box.style.left = oevent.clientX - disx + "px";
  box.style.top = oevent.clientY - disy + "px";
 }
 document.onmouseup = function(){
  document.onmousemove = null;
  document.onmouseup = null;
 }
 return false;
 }
}
</script>
</head>
<body>
<h1>鼠标拖动</h1>
<div id="box"></div>
</body>
</html>

再改进一下,上面的鼠标拖动没有限制范围,有时会拖动窗口外面看不见了。下面就限制下范围

要点一:如下,如果元素的左边位置小于0时,给它赋值为0,如果大于可视窗大小减去元素本身的宽度的,给它赋值为 可视窗大小减元素本身宽度的差值。

var boxl = oevent.clientX - disx;
if(boxl < 0){
  boxl =0;
  }else if(boxl > vieww - box.offsetWidth){
  boxl = vieww - box.offsetWidth;
  }
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>无标题文档</title>
<style>
body{margin:0; padding:0;}
#box{width:100px;
height:100px;
background:#06c;
position:absolute;
}
</style>
<script>
window.onload = function(){
 var box = document.getElementById("box");
 var disx =0;
 var disy = 0;
 box.onmousedown = function(evt){
 var oevent = evt || window.event;
 disx = oevent.clientX - box.offsetLeft;
 disy = oevent.clientY - box.offsetTop;
 document.onmousemove = function(evt){
  var oevent = evt || window.event;
  var boxl = oevent.clientX - disx;
  var boxt = oevent.clientY - disy
  var vieww = document.documentElement.clientWidth || document.body.clientWidth;
  var viewh = document.documentElement.clientHeight || document.body.clientHeight;
  if(boxl < 0){
  boxl =0;
  }else if(boxl > vieww - box.offsetWidth){
  boxl = vieww - box.offsetWidth;
  }
  if(boxt < 0){
  boxt =0;
  }else if(boxt > viewh - box.offsetHeight){
  boxt = viewh- box.offsetHeight;
  }
  box.style.left = boxl + "px";
  box.style.top = boxt + "px";
 }
 document.onmouseup = function(){
  document.onmousemove = null;
  document.onmouseup = null;
 }
 return false;
 }
}
</script>
</head>
<body>
<h1>鼠标拖动</h1>
<div id="box"></div>
</body>
</html>

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

Javascript 相关文章推荐
Prototype 学习 Prototype对象
Jul 12 Javascript
基于jquery的direction图片渐变动画效果
May 24 Javascript
javascript计算星座属相(十二生肖属相)示例代码
Jan 09 Javascript
js中数组排序sort方法的原理分析
Nov 20 Javascript
js实现文本框选中的方法
May 26 Javascript
javascript基本算法汇总
Mar 09 Javascript
JQuery解析XML的方法小结
Apr 02 Javascript
使用RequireJS库加载JavaScript模块的实例教程
Jun 06 Javascript
一个可复用的vue分页组件
May 15 Javascript
vue init webpack myproject构建项目 ip不能访问的解决方法
Mar 20 Javascript
Node.js实现注册邮箱激活功能的方法示例
Mar 23 Javascript
关于JavaScript中异步/等待的用法与理解
Nov 18 Javascript
js简单实现点击左右运动的方法
Apr 10 #Javascript
js实现透明度渐变效果的方法
Apr 10 #Javascript
js实现同一页面多个运动效果的方法
Apr 10 #Javascript
js实现同一个页面多个渐变效果的方法
Apr 10 #Javascript
js实现缓冲运动效果的方法
Apr 10 #Javascript
js实现分享到随页面滚动而滑动效果的方法
Apr 10 #Javascript
js实现同一页面多个不同运动效果的方法
Apr 10 #Javascript
You might like
php获取指定数量随机字符串的方法
2017/02/06 PHP
php分享朋友圈的实现代码
2019/02/18 PHP
IE与firefox之jquery用法区别
2008/10/03 Javascript
JavaScript 基础篇之运算符、语句(二)
2012/04/07 Javascript
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
2013/01/11 Javascript
JQuery简单实现锚点链接的平滑滚动
2015/05/03 Javascript
通过点击jqgrid表格弹出需要的表格数据
2015/12/02 Javascript
使用vue.js开发时一些注意事项
2016/04/27 Javascript
jquery删除table当前行的实例代码
2016/10/07 Javascript
JS对象是否拥有某属性如何判断
2017/02/03 Javascript
bootstrap实现动态进度条效果
2017/03/08 Javascript
整理关于Bootstrap排版的慕课笔记
2017/03/29 Javascript
Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )
2017/03/31 Javascript
webpack4之SplitChunksPlugin使用指南
2018/06/12 Javascript
详谈js的变量提升以及使用方法
2018/10/06 Javascript
使用vue脚手架(vue-cli)搭建一个项目详解
2019/05/09 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
2019/09/02 Javascript
layui监听select变化,以及设置radio选中的方法
2019/09/24 Javascript
js实现贪吃蛇小游戏(加墙)
2020/07/31 Javascript
详解node.js创建一个web服务器(Server)的详细步骤
2021/01/15 Javascript
[43:36]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[01:07:20]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第二场 2月2日
2021/03/11 DOTA
Python实现的一个找零钱的小程序代码分享
2014/08/25 Python
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
2015/04/16 Python
详解如何使用Python编写vim插件
2017/11/28 Python
python re库的正则表达式入门学习教程
2019/03/08 Python
python分数表示方式和写法
2019/06/26 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
2021/02/02 Python
美国隐形眼镜销售网站:ContactsDirect
2017/10/28 全球购物
南京某软件公司的.net面试题
2015/11/30 面试题
食品安全承诺书
2014/05/22 职场文书
我的中国梦演讲稿400字
2014/08/19 职场文书
孩子教育的心得体会
2014/09/01 职场文书
户籍证明模板
2014/09/28 职场文书
教师创先争优承诺书
2015/04/27 职场文书
Java Spring 控制反转(IOC)容器详解
2021/10/05 Java/Android