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 相关文章推荐
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
Jun 14 Javascript
JavaScript调试技巧之console.log()详解
Mar 19 Javascript
JQuery中serialize() 序列化
Mar 13 Javascript
jquery实现图片随机排列的方法
May 04 Javascript
JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)
Mar 25 Javascript
如何实现星星评价(jquery.raty.js插件)
Dec 21 Javascript
利用JS实现文字的聚合动画效果
Jan 22 Javascript
js中小数向上取整数,向下取整数,四舍五入取整数的实现(必看篇)
Feb 13 Javascript
ECMAScript6 新特性范例大全
Mar 24 Javascript
Angular 如何使用第三方库的方法
Apr 18 Javascript
详解js常用分割取字符串的方法
May 15 Javascript
vue中js判断长时间不操作界面自动退出登录(推荐)
Jan 22 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获取类中常量,属性,及方法列表的方法
2009/04/09 PHP
Drupal7中常用的数据库操作实例
2014/03/02 PHP
php实现的替换敏感字符串类实例
2014/09/22 PHP
WordPress中获取指定分类及其子分类下的文章数目
2015/12/31 PHP
PHP错误处理函数
2016/04/03 PHP
指定js可访问其它域名的cookie的方法
2007/09/18 Javascript
jquery中的$(document).ready()与window.onload的区别
2009/11/18 Javascript
基于jQuery的合并表格中相同文本的相邻单元格的代码
2011/04/06 Javascript
js动画(animate)简单引擎代码示例
2012/12/04 Javascript
jquery检测input checked 控件是否被选中的方法
2014/03/26 Javascript
微信小程序 动态传参实例详解
2017/04/27 Javascript
微信小程序 转发功能的实现
2017/08/04 Javascript
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
2017/09/26 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
2017/11/28 Javascript
JavaScript图片处理与合成总结
2018/03/04 Javascript
详解Vue微信授权登录前后端分离较为优雅的解决方案
2018/06/29 Javascript
JavaScript中call和apply方法的区别实例分析
2018/08/03 Javascript
JavaScript模板引擎应用场景及实现原理详解
2018/12/14 Javascript
JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析
2019/03/06 Javascript
Vue表单之v-model绑定下拉列表功能
2019/05/14 Javascript
js实现页面多个日期时间倒计时效果
2019/06/20 Javascript
vue cli3适配所有端方案的实现
2020/04/13 Javascript
electron踩坑之remote of undefined的解决
2020/10/06 Javascript
python tools实现视频的每一帧提取并保存
2020/03/20 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
Django视图、传参和forms验证操作
2020/07/15 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
上海某公司.net方向笔试题
2014/09/14 面试题
大学生毕业求职找工作的自我评价
2013/09/29 职场文书
关爱留守儿童标语
2014/06/18 职场文书
政风行风自查自纠报告
2014/10/21 职场文书
2015小学教师年度考核工作总结
2015/05/12 职场文书
基层党建工作简报
2015/07/21 职场文书
2016年元旦致辞
2015/08/01 职场文书
意外事故赔偿协议书
2016/03/22 职场文书
如何用Laravel包含你自己的帮助函数
2021/05/27 PHP