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的cookie插件
Apr 07 Javascript
json数据与字符串的相互转化示例
Sep 18 Javascript
JS的数组迭代方法
Feb 05 Javascript
javascript中判断json的方法总结
Aug 27 Javascript
jQuery对html元素的取值与赋值实例详解
Dec 18 Javascript
jquery实现超简单的瀑布流布局【推荐】
Mar 08 Javascript
JavaScript使用atan2来绘制箭头和曲线的实例
Sep 14 Javascript
JavaScript内置对象math,global功能与用法实例分析
Jun 10 Javascript
layer实现弹出层自动调节位置
Sep 05 Javascript
JavaScript this在函数中的指向及实例详解
Oct 14 Javascript
小程序跨页面交互的作用与方法详解
Jan 07 Javascript
JS实现网页烟花动画效果
Mar 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
js实现同一页面多个不同运动效果的方法
Apr 10 #Javascript
You might like
Mysql中limit的用法方法详解与注意事项
2008/04/19 PHP
一个经典实用的PHP图像处理类分享
2014/11/18 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
jQuery动态添加 input type=file的实现代码
2012/06/14 Javascript
正负小数点后两位浮点数实现原理及代码
2013/09/06 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
2013/12/04 Javascript
jquery 显示*天*时*分*秒实现时间计时器
2014/05/07 Javascript
Js 正则表达式知识汇总
2014/12/02 Javascript
JSON+Jquery省市区三级联动
2016/01/13 Javascript
初步使用bootstrap快速创建页面
2016/03/03 Javascript
微信小程序之ES6与事项助手的功能实现
2016/11/30 Javascript
js实现颜色阶梯渐变效果(Gradient算法)
2017/03/21 Javascript
微信小程序 获取二维码实例详解
2017/06/23 Javascript
详解webpack3如何正确引用并使用jQuery库
2017/08/26 jQuery
详解React Native开源时间日期选择器组件(react-native-datetime)
2017/09/13 Javascript
vue2.0项目实现路由跳转的方法详解
2018/06/21 Javascript
在create-react-app中使用css modules的示例代码
2018/07/31 Javascript
vue封装可复用组件confirm,并绑定在vue原型上的示例
2019/10/31 Javascript
[05:02][DOTA2]DOTA进化论 第一期
2013/09/27 DOTA
Python入门篇之数字
2014/10/20 Python
python中shell执行知识点
2020/05/06 Python
解析python 类方法、对象方法、静态方法
2020/08/15 Python
Pycharm-community-2020.2.3 社区版安装教程图文详解
2020/12/08 Python
PyCharm2020.3.2安装超详细教程
2021/02/08 Python
AmazeUI 图标的示例代码
2020/08/13 HTML / CSS
意大利奢侈品网站:Italist
2016/08/23 全球购物
国外最大的眼镜网站:Coastal
2017/08/09 全球购物
草莓网官网:StrawberryNET
2019/08/21 全球购物
新东方旗下远程教育网站:新东方在线
2020/03/19 全球购物
焊接专业毕业生求职信
2013/10/01 职场文书
缓刑人员的思想汇报
2014/01/11 职场文书
幼儿园教学管理制度
2014/02/04 职场文书
护士工作失误检讨书
2014/09/14 职场文书
债务纠纷代理词
2015/05/25 职场文书
Pytorch GPU内存占用很高,但是利用率很低如何解决
2021/06/01 Python
解决IDEA翻译插件Translation报错更新TTK失败不能使用
2022/04/24 Python