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下利用arguments实现string.format函数
Aug 24 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
Oct 16 Javascript
js 实现日期灵活格式化的小例子
Jul 14 Javascript
jquery批量控制form禁用的代码
Aug 06 Javascript
jQuery.form插件的使用及跨域异步上传文件
Apr 27 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
Aug 01 Javascript
js仿拉勾网首页穿墙广告效果
Mar 08 Javascript
input 标签实现输入框带提示文字效果(两种方法)
Oct 09 Javascript
详解如何使用webpack打包多页jquery项目
Feb 01 jQuery
vue swipe自定义组件实现轮播效果
Jul 03 Javascript
vue 解决addRoutes多次添加路由重复的操作
Aug 04 Javascript
vue首次渲染全过程
Apr 21 Vue.js
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小经验:解析preg_match与preg_match_all 函数
2013/06/29 PHP
PHP 中TP5 Request 请求对象的实例详解
2017/07/31 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
2019/08/05 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
JavaScript Distilled 基础知识与函数
2010/04/07 Javascript
通过判断JavaScript的版本实现执行不同的代码
2010/05/11 Javascript
8个实用的jQuery技巧
2014/03/04 Javascript
jQuery插件jFade实现鼠标经过的图片高亮其它变暗
2015/03/14 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
2016/08/24 Javascript
jQuery.form.js插件不能解决连接超时(timeout)的原因分析及解决方法
2016/10/14 Javascript
jQuery+json实现动态创建复杂表格table的方法
2016/10/25 Javascript
vue结合Echarts实现点击高亮效果的示例
2018/03/17 Javascript
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
ES6 Set结构的应用实例分析
2019/06/26 Javascript
解决mui框架中switch开关通过js控制开或者关状态时小圆点不动的问题
2019/09/03 Javascript
JavaScript图像放大镜效果实现方法详解
2020/06/28 Javascript
Python中使用md5sum检查目录中相同文件代码分享
2015/02/02 Python
Python3里的super()和__class__使用介绍
2015/04/23 Python
在Python中使用mechanize模块模拟浏览器功能
2015/05/05 Python
python生成随机图形验证码详解
2017/11/08 Python
python将字典内容存入mysql实例代码
2018/01/18 Python
Python Tkinter实现简易计算器功能
2018/01/30 Python
Python可视化mhd格式和raw格式的医学图像并保存的方法
2019/01/24 Python
Python利用FFT进行简单滤波的实现
2020/02/26 Python
Python闭包与装饰器原理及实例解析
2020/04/30 Python
Python带参数的装饰器运行原理解析
2020/06/09 Python
浅谈PyTorch中in-place operation的含义
2020/06/27 Python
css3 transform导致子元素固定定位变成绝对定位的方法
2020/03/06 HTML / CSS
Linux常见面试题
2016/10/04 面试题
长辈证婚人证婚词
2014/01/09 职场文书
大学班级干部的自我评价分享
2014/02/10 职场文书
给校长的一封检讨书
2014/09/20 职场文书
离婚财产处理协议书
2014/09/30 职场文书
弘扬焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
Nginx URL重写rewrite机制原理及使用实例
2021/04/01 Servers
使用Python获取字典键对应值的方法
2022/04/26 Python