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 相关文章推荐
Javascript 面向对象 命名空间
May 13 Javascript
jquery 图片轮换效果
Jul 29 Javascript
document.getElementById介绍
Sep 13 Javascript
现如今最流行的JavaScript代码规范
Mar 08 Javascript
JavaScript获取某年某月的最后一天附截图
Jun 23 Javascript
JavaScript生成二维码图片小结
Dec 27 Javascript
Javascript 严格模式use strict详解
Sep 16 Javascript
react native 原生模块桥接的简单说明小结
Feb 26 Javascript
微信端调取相册和摄像头功能,实现图片上传,并上传到服务器
May 16 Javascript
使用vue自定义指令开发表单验证插件validate.js
May 23 Javascript
在Echarts图中给坐标轴加一个标识线markLine
Jul 20 Javascript
vue项目中播放rtmp视频文件流的方法
Sep 17 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 获取客户端真实IP地址多种方法小结
2010/05/15 PHP
PHP stream_context_create()作用和用法分析
2011/03/29 PHP
教你如何用php实现LOL数据远程获取
2014/06/10 PHP
基于thinkPHP类的插入数据库操作功能示例
2017/01/06 PHP
如何利用预加载优化Laravel Model查询详解
2017/08/11 PHP
php+ajax实现仿百度查询下拉内容功能示例
2017/10/20 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
javascript 从if else 到 switch case 再到抽象
2010/07/17 Javascript
JavaScript生成GUID的多种算法小结
2013/08/18 Javascript
jQuery设置与获取HTML,文本和值的简单实例
2014/02/26 Javascript
用js格式化金额可设置保留的小数位数
2014/05/09 Javascript
javascript实现控制文字大中小显示
2015/04/28 Javascript
微信小程序 Windows2008 R2服务器配置TLS1.2方法
2016/12/05 Javascript
编写React组件项目实践分析
2018/03/04 Javascript
React-router4路由监听的实现
2018/08/07 Javascript
Vue实现美团app的影院推荐选座功能【推荐】
2018/08/29 Javascript
JavaScript中变量提升和函数提升的详解
2020/08/07 Javascript
[58:09]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第三场 6.2
2018/06/03 DOTA
[56:21]LGD vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
[原创]Python入门教程4. 元组基本操作
2018/10/31 Python
python ddt数据驱动最简实例代码
2019/02/22 Python
基于wxPython的GUI实现输入对话框(1)
2019/02/27 Python
梅尔频率倒谱系数(mfcc)及Python实现
2019/06/18 Python
python调用其他文件函数或类的示例
2019/07/16 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
Python lambda表达式原理及用法解析
2020/08/18 Python
详解python爬取弹幕与数据分析
2020/11/14 Python
HTML5移动端开发遇见的东西
2019/10/11 HTML / CSS
安全生产投入制度
2014/01/29 职场文书
高中毕业生登记表自我鉴定范文
2014/03/18 职场文书
党员个人总结自评
2015/02/14 职场文书
2015大学生党员自我评价范文
2015/03/03 职场文书
在项目中使用redis做缓存的一些思路
2021/09/14 Redis