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操作XML实例代码(获取新闻标题并分页,并分页)
May 25 Javascript
jquery isEmptyObject判断是否为空对象的函数
Feb 14 Javascript
js 页面关闭前的出现提示的实现代码
May 25 Javascript
JS对话框_JS模态对话框showModalDialog用法总结
Jan 11 Javascript
js面向对象之公有、私有、静态属性和方法详解
Apr 17 Javascript
你所不了解的javascript操作DOM的细节知识点(一)
Jun 17 Javascript
JS中的二叉树遍历详解
Mar 18 Javascript
浅析Bootstrap缩略图组件与警示框组件
Apr 29 Javascript
[js高手之路]设计模式系列课程-发布者,订阅者重构购物车的实例
Aug 29 Javascript
node.js中Buffer缓冲器的原理与使用方法分析
Nov 23 Javascript
javascript实现拖拽碰撞检测
Mar 12 Javascript
vue-cli单页面预渲染seo-prerender-spa-plugin操作
Aug 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
js实现同一页面多个不同运动效果的方法
Apr 10 #Javascript
You might like
一个显示效果非常不错的PHP错误、异常处理类
2014/03/21 PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
2016/08/08 PHP
php常用字符函数实例小结
2016/12/29 PHP
jsTree树控件(基于jQuery, 超强悍)[推荐]
2009/09/01 Javascript
在jquery中的ajax方法怎样通过JSONP进行远程调用
2014/04/04 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
Nodejs学习笔记之Stream模块
2015/01/13 NodeJs
JavaScript改变CSS样式的方法汇总
2015/05/07 Javascript
JS实现自动变换的菜单效果代码
2015/09/09 Javascript
JavaScript编程的单例设计模讲解
2015/11/10 Javascript
如何动态加载外部Javascript文件
2015/12/02 Javascript
微信小程序自定义prompt组件步骤详解
2018/06/12 Javascript
vue、react等单页面项目部署到服务器的方法及vue和react的区别
2018/09/29 Javascript
基于游标的分页接口实现代码示例
2018/11/12 Javascript
layui实现下拉框三级联动
2019/07/26 Javascript
[38:54]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第一场 11.28
2020/12/01 DOTA
Python计算三维矢量幅度的方法
2015/06/15 Python
python django事务transaction源码分析详解
2017/03/17 Python
简单的python后台管理程序
2017/04/13 Python
Python与人工神经网络:使用神经网络识别手写图像介绍
2017/12/19 Python
django组合搜索实现过程详解(附代码)
2019/08/06 Python
python中的列表与元组的使用
2019/08/08 Python
pyinstaller打包单文件时--uac-admin选项不起作用怎么办
2020/04/15 Python
Django之腾讯云短信的实现
2020/06/12 Python
python性能测试工具locust的使用
2020/12/28 Python
Python Selenium库的基本使用教程
2021/01/04 Python
Html5新特性用canvas标签画多条直线附效果截图
2014/06/30 HTML / CSS
英国最大的滑板品牌选择:Route One
2019/09/22 全球购物
Fenty Beauty官网:蕾哈娜创立的美妆品牌
2021/01/07 全球购物
Linux Interview Questions For software testers
2013/05/17 面试题
卫生标语大全
2014/06/21 职场文书
县政府领导班子“四风”方面突出问题整改措施
2014/09/23 职场文书
2015年党员个人剖析材料
2014/12/18 职场文书
家属联谊会致辞
2015/07/31 职场文书
初中班主任心得体会
2016/01/07 职场文书
JS高级程序设计之class继承重点详解
2022/07/07 Javascript