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 相关文章推荐
JS event使用方法详解
Apr 28 Javascript
jQuery 创建Dom元素
May 07 Javascript
js判断图片加载完成后获取图片实际宽高的方法
Feb 25 Javascript
15个值得开发人员关注的jQuery开发技巧和心得总结【经典收藏】
May 25 Javascript
JavaScript中两个字符串的匹配
Jun 08 Javascript
从0开始学Vue
Oct 27 Javascript
JS实现探测网站链接的方法【测试可用】
Nov 08 Javascript
VUE JS 使用组件实现双向绑定的示例代码
Jan 10 Javascript
js实现tab选项卡切换功能
Jan 13 Javascript
使用vue-cli+webpack搭建vue开发环境的方法
Dec 22 Javascript
详解vue中使用微信jssdk
Apr 19 Javascript
Vue-router 报错NavigationDuplicated的解决方法
Mar 31 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
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
php iconv() : Detected an illegal character in input string
2010/12/05 PHP
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
Laravel给生产环境添加监听事件(SQL日志监听)
2017/06/19 PHP
JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
2013/12/31 Javascript
自己实现ajax封装示例分享
2014/04/01 Javascript
元素未显示设置width/height时IE中使用currentStyle获取为auto
2014/05/04 Javascript
javascript学习笔记--数字格式类型
2014/05/22 Javascript
js控制再次点击按钮之间的间隔时间可防止重复提交
2014/08/01 Javascript
浅谈关于JavaScript API设计的一些建议和准则
2015/06/24 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
bootstrap制作jsp页面(根据值让table显示选中)
2017/01/05 Javascript
Flask中获取小程序Request数据的两种方法
2017/05/12 Javascript
Javascript实现倒计时时差效果
2017/05/18 Javascript
JS去掉字符串前后空格、阻止表单提交的实现代码
2017/06/08 Javascript
Angular 2父子组件数据传递之@Input和@Output详解 (上)
2017/07/05 Javascript
QRCode.js二维码生成并能长按识别
2018/10/16 Javascript
axios+Vue实现上传文件显示进度功能
2019/04/14 Javascript
防止Layui form表单重复提交的实现方法
2019/09/10 Javascript
javascript实现支付宝滑块验证码效果
2020/07/24 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
2020/09/02 Javascript
react+antd 递归实现树状目录操作
2020/11/02 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
2020/12/25 Vue.js
pandas 两列时间相减换算为秒的方法
2018/04/20 Python
基于numpy中数组元素的切片复制方法
2018/11/15 Python
新年快乐! python实现绚烂的烟花绽放效果
2019/01/30 Python
使用TensorFlow搭建一个全连接神经网络教程
2020/02/06 Python
利用Python实现学生信息管理系统的完整实例
2020/12/30 Python
解决pytorch下出现multi-target not supported at的一种可能原因
2021/02/06 Python
MATCHESFASHION澳大利亚/亚太地区:英国时尚奢侈品电商
2020/01/14 全球购物
将"引用"作为函数参数有哪些特点
2013/04/05 面试题
自主招生自荐书
2013/11/29 职场文书
教师党员思想汇报
2014/01/06 职场文书
党的群众路线教育实践活动心得体会(医院)
2014/11/03 职场文书
酒店工程部主管岗位职责
2015/04/16 职场文书