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小玩意 几个属性相加不能超过一个特定值.
Sep 29 Javascript
动态创建样式表在各浏览器中的差异测试代码
Sep 13 Javascript
最短的javascript:地址栏载入脚本代码
Oct 13 Javascript
javascript中parentNode,childNodes,children的应用详解
Dec 17 Javascript
AngularJS 如何在控制台进行错误调试
Jun 07 Javascript
使用JS实现图片展示瀑布流效果(简单实例)
Sep 06 Javascript
JS实现颜色梯度与渐变效果完整实例
Dec 30 Javascript
ajax分页效果(bootstrap模态框)
Jan 23 Javascript
JavaScript登录记住密码操作(超简单代码)
Mar 22 Javascript
React组件生命周期详解
Jul 03 Javascript
解决vue admin element noCache设置无效的问题
Nov 12 Javascript
JavaScript 中判断变量是否为数字的示例代码
Oct 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弹出对话框实现重定向代码
2014/01/23 PHP
php array_pop 删除数组最后一个元素实例
2016/11/02 PHP
php给数组赋值的实例方法
2019/09/26 PHP
表格 隔行换色升级版
2009/11/07 Javascript
jquery统计输入文字的个数并对其进行判断
2014/01/07 Javascript
AngularJS实现表单手动验证和表单自动验证
2015/12/09 Javascript
快速解决js中window.location.href不工作的问题
2016/11/02 Javascript
JS中BOM相关知识点总结(必看篇)
2016/11/22 Javascript
详解JavaScript树结构
2017/01/09 Javascript
关于定制FileField中的上传文件名称问题
2017/08/22 Javascript
微信小程序使用checkbox显示多项选择框功能【附源码下载】
2017/12/11 Javascript
Vue.js 图标选择组件实践详解
2018/12/03 Javascript
vue实现用户长时间不操作自动退出登录功能的实现代码
2020/07/23 Javascript
Vue使用Ref跨层级获取组件的步骤
2021/01/25 Vue.js
[04:44]DOTA2 2017全国高校联赛视频回顾
2017/08/21 DOTA
[04:50]2019DOTA2高校联赛秋季赛四强集锦
2019/12/27 DOTA
python遍历类中所有成员的方法
2015/03/18 Python
Python中getattr函数和hasattr函数作用详解
2016/06/14 Python
Python三级菜单的实例
2017/09/13 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
Django 大文件下载实现过程解析
2019/08/01 Python
wxPython+Matplotlib绘制折线图表
2019/11/19 Python
Pandas 解决dataframe的一列进行向下顺移问题
2019/12/27 Python
Python基于tkinter canvas实现图片裁剪功能
2020/11/05 Python
美国钻石商店:Zales
2016/11/20 全球购物
受外贸欢迎的美国主机:BlueHost
2017/05/16 全球购物
西班牙美妆电商:Perfume’s Club(有中文站)
2018/08/08 全球购物
英国HYPE双肩包官网:英国本土时尚潮牌
2018/09/26 全球购物
人事专员岗位职责
2013/11/20 职场文书
学习十八大报告感言
2014/02/04 职场文书
中学优秀班主任事迹材料
2014/05/01 职场文书
3.15消费者权益日活动总结
2015/02/09 职场文书
工商局个人工作总结
2015/03/03 职场文书
教师个人师德工作总结2015
2015/05/12 职场文书
工作违纪的检讨书范文
2019/07/09 职场文书
SQL语句中EXISTS的详细用法大全
2022/06/25 MySQL