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 bind 函数 使用闭包保存执行上下文
Dec 26 Javascript
jquery动画1.加载指示器
Aug 24 Javascript
jquery实现点击TreeView文本父节点展开/折叠子节点
Jan 10 Javascript
jQuery获取剪贴板内容的方法
Jun 16 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
Sep 20 Javascript
vue.js选中动态绑定的radio的指定项
Jun 02 Javascript
bootstrap 通过加减按钮实现输入框组功能
Nov 15 Javascript
JS实现简易换图时钟功能分析
Jan 04 Javascript
JavaScript实现点击出现图片并统计点击次数功能示例
Jul 23 Javascript
详解Vue开发微信H5微信分享签名失败问题解决方案
Aug 09 Javascript
Vue替代marquee标签超出宽度文字横向滚动效果
Dec 09 Javascript
JS实现点击掉落特效
Jan 29 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
用文本文件制作留言板提示(下)
2006/10/09 PHP
PHP扩展CURL的用法详解
2014/06/20 PHP
php中strtotime函数性能分析
2016/11/20 PHP
php7连接MySQL实现简易查询程序的方法
2020/10/13 PHP
input+select(multiple) 实现下拉框输入值
2009/05/21 Javascript
event对象的方法 兼容多浏览器
2009/06/27 Javascript
测试JavaScript字符串处理性能的代码
2009/12/07 Javascript
一个简单的瀑布流效果(主体形式自写)
2013/05/27 Javascript
JavaScript程序中的流程控制语句用法总结
2016/05/23 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
在 Angular 中实现搜索关键字高亮示例
2017/03/21 Javascript
基于滚动条位置判断的简单实例
2017/12/14 Javascript
基于three.js实现的3D粒子动效实例代码
2019/04/09 Javascript
vue项目创建并引入饿了么elementUI组件的步骤
2019/04/11 Javascript
javascript 关于赋值、浅拷贝、深拷贝的个人理解
2019/11/01 Javascript
JS实现“全选”和&quot;全不选&quot;功能代码实例
2020/02/06 Javascript
JavaScript 正则应用详解【模式、欲查、反向引用等】
2020/05/13 Javascript
Python实现的选择排序算法示例
2017/11/29 Python
python实现顺序表的简单代码
2018/09/28 Python
django框架model orM使用字典作为参数,保存数据的方法分析
2019/06/24 Python
keras用auc做metrics以及早停实例
2020/07/02 Python
Pycharm调试程序技巧小结
2020/08/08 Python
python 数据类型强制转换的总结
2021/01/25 Python
基于css3 animate制作绚丽的动画效果
2015/11/24 HTML / CSS
css3使用animation属性实现炫酷效果(推荐)
2020/02/04 HTML / CSS
Html5监听手机摇一摇事件的实现
2019/11/07 HTML / CSS
Stutterheim瑞典:瑞典高级外套时装品牌
2019/06/24 全球购物
新闻编辑求职信
2014/04/09 职场文书
住宿生擅自离校检讨书
2014/09/22 职场文书
工作失职检讨书(精华篇)
2014/10/15 职场文书
大学生党员暑假实践(活动总结)
2019/08/21 职场文书
2019年冬至:天冷暖人心的问候祝福语大全
2019/12/20 职场文书
十大最强格斗系宝可梦,超梦X仅排第十,第二最重格斗礼仪
2022/03/18 日漫
SpringBoot整合Minio文件存储
2022/04/03 Java/Android
Python多线程实用方法以及共享变量资源竞争问题
2022/04/12 Python
Android基础入门之dataBinding的简单使用教程
2022/06/21 Java/Android