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 相关文章推荐
在IE模态窗口中自由查看HTML源码的方法
Mar 08 Javascript
js中方法重载如何实现?以及函数的参数问题
Aug 01 Javascript
jquery sortable的拖动方法示例详解
Jan 16 Javascript
用js将内容复制到剪贴板兼容浏览器
Mar 18 Javascript
JS实现星星评分功能实例代码(两种方法)
Jun 09 Javascript
浅谈JS之tagNaem和nodeName
Sep 13 Javascript
js实现碰撞检测特效代码分享
Oct 16 Javascript
详解基于 axios 的 Vue 项目 http 请求优化
Sep 04 Javascript
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
Dec 05 jQuery
对angular 监控数据模型变化的事件方法$watch详解
Oct 09 Javascript
JS正则表达式验证端口范围(0-65535)
Jan 06 Javascript
js实现验证码干扰(动态)
Feb 23 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
正义联盟的终局之战《天启星战争》将成为DC动画宇宙的最后一部
2020/04/09 欧美动漫
世界第一个无线广播电台 KDKA
2021/03/01 无线电
你应该知道PHP浮点数知识
2015/05/13 PHP
php ajax实现文件上传进度条
2016/03/29 PHP
Thinkphp和onethink实现微信支付插件
2016/04/13 PHP
php生成网页桌面快捷方式
2017/05/05 PHP
php7新特性的理解和比较总结
2019/04/14 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
2019/05/29 PHP
基于jquery.Jcrop的头像编辑器
2010/03/01 Javascript
JQuery自定义事件的应用 JQuery最佳实践
2010/08/01 Javascript
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
2010/11/28 Javascript
JavaScript实现自己的DOM选择器原理及代码
2013/03/04 Javascript
js中的for如何实现foreach中的遍历
2014/05/31 Javascript
深入理解JavaScript编程中的同步与异步机制
2015/06/24 Javascript
jquery带有索引按钮且自动轮播切换特效代码分享
2015/09/15 Javascript
javascript闭包概念简单解析(推荐)
2016/06/03 Javascript
jQuery简单实现tab选项卡切换效果
2016/06/20 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
2016/11/16 Javascript
任意Json转成无序列表的方法示例
2016/12/09 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
详谈js对url进行编码和解码(三种方式的区别)
2017/08/16 Javascript
用vue封装插件并发布到npm的方法步骤
2017/10/18 Javascript
简单实现jQuery弹窗效果
2017/10/30 jQuery
微信小程序icon组件使用详解
2018/01/31 Javascript
[00:37]2016完美“圣”典风云人物:AMS宣传片
2016/12/06 DOTA
python使用在线API查询IP对应的地理位置信息实例
2014/06/01 Python
python 多维高斯分布数据生成方式
2019/12/09 Python
编程用JAVA解析XML的方式
2013/07/07 面试题
审核会计岗位职责
2013/11/08 职场文书
创业者迈进成功第一步:如何写创业计划书?
2014/03/22 职场文书
英文自荐信常用句子
2014/03/26 职场文书
外语系毕业生求职自荐信
2014/04/12 职场文书
小学生操行评语大全
2014/04/22 职场文书
法院授权委托书范文
2014/08/02 职场文书
幼师求职自荐信
2015/03/26 职场文书
小学六年级毕业感言
2015/07/30 职场文书