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 相关文章推荐
2010年最佳jQuery插件整理
Dec 06 Javascript
jquery 清空file域示例(兼容个浏览器)
Oct 11 Javascript
div浮层,滚动条移动,位置保持不变的4种方法汇总
Dec 11 Javascript
JQuery实现样式设置、追加、移除与切换的方法
Jun 11 Javascript
jQuery操作cookie
Aug 08 Javascript
bootstrap 表单验证使用方法
Jan 11 Javascript
jQuery时间验证和转换为标准格式的时间格式
Mar 06 Javascript
详解Vuex中mapState的具体用法
Sep 28 Javascript
JavaScript实现元素滚动条到达一定位置循环追加内容
Dec 28 Javascript
vue-cli3使用mock数据的方法分析
Mar 16 Javascript
基于javascript原生判断DOM是否加载完毕
Oct 14 Javascript
详解JavaScript中的this指向问题
Feb 05 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/12/16 PHP
php写入、删除与复制文件的方法
2015/06/20 PHP
SUN的《AJAX与J2EE》全文译了
2007/02/23 Javascript
JavaScript 空位补零实现代码
2010/02/26 Javascript
js word表格动态添加代码
2010/06/07 Javascript
asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)
2012/03/14 Javascript
jquery text()方法取标签中的文本
2014/07/25 Javascript
JavaScript中最简洁的编码html字符串的方法
2014/10/11 Javascript
JavaScript获取网页表单提交方式的方法
2015/04/02 Javascript
JS处理json日期格式化问题
2015/10/01 Javascript
noty ? jQuery通知插件全面解析
2016/05/18 Javascript
JavaScript对象数组排序实例方法浅析
2016/06/15 Javascript
nodejs搭建本地服务器轻松解决跨域问题
2018/03/21 NodeJs
nodejs用gulp管理前端文件方法
2018/06/24 NodeJs
JS实现图片旋转动画效果封装与使用示例
2018/07/09 Javascript
浅谈vux之x-input使用以及源码解读
2018/11/04 Javascript
详解微信图片防盗链“此图片来自微信公众平台 未经允许不得引用”的解决方案
2019/04/04 Javascript
vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转)
2019/05/10 Javascript
了解重排与重绘
2019/05/29 Javascript
在vue中阻止浏览器后退的实例
2019/11/06 Javascript
[51:05]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第一局
2016/03/06 DOTA
教你学会使用Python正则表达式
2017/09/07 Python
Python实现PS图像调整颜色梯度效果示例
2018/01/25 Python
Python字符串的全排列算法实例详解
2019/01/07 Python
举例讲解Python常用模块
2019/03/08 Python
CSS3中的content属性使用示例
2015/07/20 HTML / CSS
css3实现文字扫光渐变动画效果的示例
2017/11/07 HTML / CSS
html5桌面通知(Web Notifications)实例解析
2014/07/07 HTML / CSS
妇女儿童发展规划实施方案
2014/03/16 职场文书
安全施工标语
2014/06/07 职场文书
基层党组织整改方案
2014/10/25 职场文书
学习十八届四中全会依法治国心得体会
2014/11/03 职场文书
2014年党务公开工作总结
2014/12/09 职场文书
学生个人评语大全
2015/01/04 职场文书
小学班主任培训心得体会
2016/01/07 职场文书
redis 限制内存使用大小的实现
2021/05/08 Redis