- 浏览: 45565 次
- 性别:
- 来自: 大连
最新评论
关于js实现最简单的拖拽
说到拖拽功能,现在各大,中,小型网站都基本上有类似的东西,特别是对弹出层拖拽,更是常见的一塌糊涂。。。
其实对于弹出层而言,拖拽最初的目的很单纯,就是为了通过拉开层,使被弹出层挡住的内容可见,(当然,后来关于拖拽的功能不断被优化,使得拖拽的应用有了别的意义,最典型的如igoogle的自定义首页,通过拖放的形式满足用户自定义想要的内容模块顺序和位置)。
本文讨论的重点不是iGoogle的拖放效果,那属于进阶篇,本文是拖拽的“第一阶”,如题,实现最简单的拖拽。
这里的“最简单”即不考虑多个拖拽层的堆叠顺序,不考虑拖拽范围限制,不考虑类似iGoogle的“dragTo”的效果等等。。。
恩,废话不多说了,先给大家看个实例吧:
拖我试试...
content...点此-->打开 由于我是直接在页面上内嵌的所有代码,加上博客园第三方插件的原因,代码执行效率高,有可能运行起来不是很流畅
拖拽其实就涉及的鼠标的三个事件,onmousedown,onmouseup,onmousemove,再结合获取鼠标的位置以及层的left和top即可实现类似的效果。
在编码的时候,有两个需要注意的地方,一个是获取当前样式,currentStyle只在ie下有效,故对于非ie我们可以通过getComputedStyle实现(当然,对于这种需要获取的属性不是很多的情况,您也可以直接用obj.style[key]来获取您当前想要的属性值)
view sourceprint?1 function getStyle(o,key){return o.currentStyle? o.currentStyle[key] : document.defaultView.getComputedStyle(o,null)[key]}//'currentStyle' only for ie5.0+
另一个点就是在获取鼠标位置时要用到event,event这个东西很奇怪,ie下是局部变量,moz内核下是全局变量(说法不准确,只是便于理解),所以在获取鼠标位置时候要对event做个判断
view sourceprint?1 bar.onmousedown = function(e){
2 e = e?e:window.event; //'event' ie下局部变量,ff下全局变量
3 params.isDrag = true;
4 params._X = e.clientX; params._Y = e.clientY;
5 };
恩,注意以上两点,结合正确的思路其实就可以了,并不难,下面提供参考代码:
view sourceprint?01 function getStyle(o,key){return o.currentStyle? o.currentStyle[key] : document.defaultView.getComputedStyle(o,null)[key]}//'currentStyle' only for ie5.0+
02
03 var drag = function(bar, target){
04 var params = {
05 startLeft:0,
06 startTop:0,
07 _X:0,
08 _Y:0,
09 isDrag:false
10 };
11 if(getStyle(target,'left') != 'auto'){params.startLeft = getStyle(target,'left')}
12 if(getStyle(target,'top') != 'auto'){params.startTop = getStyle(target,'top')}
13 bar.onmousedown = function(e){
14 e = e?e:window.event; //'event' ie下局部变量,ff下全局变量
15 params.isDrag = true;
16 params._X = e.clientX; params._Y = e.clientY;
17 };
18 document.onmouseup = function(){
19 params.isDrag = false;
20 if(getStyle(target,'left') != 'auto'){params.startLeft = getStyle(target,'left')}
21 if(getStyle(target,'top') != 'auto'){params.startTop = getStyle(target,'top')}
22 };
23 document.onmousemove = function(e){
24 var e = e?e:window.event;
25 if(params.isDrag){
26 var curX = e.clientX, curY = e.clientY, desL = curX-params._X+parseInt(params.startLeft), desT = curY-params._Y+parseInt(params.startTop);
27 target.style['left'] = desL>=0?desL + 'px':0;
28 target.style['top'] = desT>=0?desT + 'px':0;
29 }
30 }
31 };
恩,至此,本文差不多可以结束了,关于类似的iGoogle的拖拽进阶篇,有时间会继续的,下面结合拖拽举个综合弹出层的例子,
不设任何options参数的box(默认高200px,宽300px)
无遮罩的box
这个弹出层插件是我在上文中就提到的,而且还提供了源文件下载,在此只是加上了拖动效果而已
ps:由于代码高亮插件的原因,遮罩层上会有白色小方块,暂没做处理。。。
说到拖拽功能,现在各大,中,小型网站都基本上有类似的东西,特别是对弹出层拖拽,更是常见的一塌糊涂。。。
其实对于弹出层而言,拖拽最初的目的很单纯,就是为了通过拉开层,使被弹出层挡住的内容可见,(当然,后来关于拖拽的功能不断被优化,使得拖拽的应用有了别的意义,最典型的如igoogle的自定义首页,通过拖放的形式满足用户自定义想要的内容模块顺序和位置)。
本文讨论的重点不是iGoogle的拖放效果,那属于进阶篇,本文是拖拽的“第一阶”,如题,实现最简单的拖拽。
这里的“最简单”即不考虑多个拖拽层的堆叠顺序,不考虑拖拽范围限制,不考虑类似iGoogle的“dragTo”的效果等等。。。
恩,废话不多说了,先给大家看个实例吧:
拖我试试...
content...点此-->打开 由于我是直接在页面上内嵌的所有代码,加上博客园第三方插件的原因,代码执行效率高,有可能运行起来不是很流畅
拖拽其实就涉及的鼠标的三个事件,onmousedown,onmouseup,onmousemove,再结合获取鼠标的位置以及层的left和top即可实现类似的效果。
在编码的时候,有两个需要注意的地方,一个是获取当前样式,currentStyle只在ie下有效,故对于非ie我们可以通过getComputedStyle实现(当然,对于这种需要获取的属性不是很多的情况,您也可以直接用obj.style[key]来获取您当前想要的属性值)
view sourceprint?1 function getStyle(o,key){return o.currentStyle? o.currentStyle[key] : document.defaultView.getComputedStyle(o,null)[key]}//'currentStyle' only for ie5.0+
另一个点就是在获取鼠标位置时要用到event,event这个东西很奇怪,ie下是局部变量,moz内核下是全局变量(说法不准确,只是便于理解),所以在获取鼠标位置时候要对event做个判断
view sourceprint?1 bar.onmousedown = function(e){
2 e = e?e:window.event; //'event' ie下局部变量,ff下全局变量
3 params.isDrag = true;
4 params._X = e.clientX; params._Y = e.clientY;
5 };
恩,注意以上两点,结合正确的思路其实就可以了,并不难,下面提供参考代码:
view sourceprint?01 function getStyle(o,key){return o.currentStyle? o.currentStyle[key] : document.defaultView.getComputedStyle(o,null)[key]}//'currentStyle' only for ie5.0+
02
03 var drag = function(bar, target){
04 var params = {
05 startLeft:0,
06 startTop:0,
07 _X:0,
08 _Y:0,
09 isDrag:false
10 };
11 if(getStyle(target,'left') != 'auto'){params.startLeft = getStyle(target,'left')}
12 if(getStyle(target,'top') != 'auto'){params.startTop = getStyle(target,'top')}
13 bar.onmousedown = function(e){
14 e = e?e:window.event; //'event' ie下局部变量,ff下全局变量
15 params.isDrag = true;
16 params._X = e.clientX; params._Y = e.clientY;
17 };
18 document.onmouseup = function(){
19 params.isDrag = false;
20 if(getStyle(target,'left') != 'auto'){params.startLeft = getStyle(target,'left')}
21 if(getStyle(target,'top') != 'auto'){params.startTop = getStyle(target,'top')}
22 };
23 document.onmousemove = function(e){
24 var e = e?e:window.event;
25 if(params.isDrag){
26 var curX = e.clientX, curY = e.clientY, desL = curX-params._X+parseInt(params.startLeft), desT = curY-params._Y+parseInt(params.startTop);
27 target.style['left'] = desL>=0?desL + 'px':0;
28 target.style['top'] = desT>=0?desT + 'px':0;
29 }
30 }
31 };
恩,至此,本文差不多可以结束了,关于类似的iGoogle的拖拽进阶篇,有时间会继续的,下面结合拖拽举个综合弹出层的例子,
不设任何options参数的box(默认高200px,宽300px)
无遮罩的box
这个弹出层插件是我在上文中就提到的,而且还提供了源文件下载,在此只是加上了拖动效果而已
ps:由于代码高亮插件的原因,遮罩层上会有白色小方块,暂没做处理。。。
发表评论
-
将DIV显示在屏幕中间
2011-08-17 22:03 3945/*设置客户端的高和宽*/ function getClie ... -
jquery弹出层
2011-03-02 20:54 1070<%@ page language="java ... -
Ajax等待
2011-01-17 22:20 802ajaxAnywhere.showLoadingMes ... -
JS指定DIV显示
2011-01-17 21:09 3415<!DOCTYPE html PUBLIC ... -
下载文件
2010-11-30 08:54 661private void downloadTeamFile(H ... -
获取浏览器右上角叉号的事件
2010-11-18 00:57 2029<javascrip> function is ... -
当前正在浏览的URL
2010-10-12 13:47 652public String getCurrentURL(Htt ... -
JXL读取Excel
2010-10-12 09:55 1056import java.io.FileInputStream; ... -
JXL写入Excel
2010-10-12 09:47 1732import java.io.File; import jav ... -
比较排序例子
2010-10-11 17:43 789import java.util.*;public class ... -
校验是否为数字
2010-10-11 13:48 879import java.util.regex.Matcher; ... -
sss
2010-09-26 10:16 0http://sol225.iteye.com/blog/51 ... -
【转载】typeof的用法
2010-09-26 10:11 733javascript中的typeof用来返回一个用来表示表达式 ... -
【转载】日历
2010-09-25 20:21 534var Calendar = function(){ ... -
【转载】无缝图片滚动代码
2010-09-25 20:17 843向右滚动: <div id=demo style=ove ... -
【转载】制作flash文件进度条
2010-09-25 20:12 832var ubType = (navigator.userAge ... -
【转载】Eclipse快捷键大全
2010-09-25 20:06 635Ctrl+1 快速修复(最经典的快捷键,就不用多说了) Ct ... -
【转载】JAVA对XML文件的读写
2010-09-25 20:01 915XML读写有很多的方法~~ JAVA中有丰富的类对XML文件 ... -
【转载】变Enter键为Tab键 实现焦点转移
2010-09-25 19:51 866/// <summary> /// 窗体控 ...
相关推荐
JavaScript 实现简单的 Div 拖拽功能是一种常见的交互设计,常用于网页上的可操作元素,如窗口、面板或自定义控件。以下是对这个实例的详细解析: 首先,我们需要一个包含拖拽功能的 Div 元素。在 HTML 中,我们...
本文将详细讲解如何使用纯JavaScript来实现一个简单的拖动功能,并通过实例代码进行解析。 首先,我们需要理解拖动的基本原理。拖动操作涉及到鼠标事件(如`mousedown`、`mousemove`和`mouseup`)以及元素的位置...
在本文中,我们将深入探讨如何使用three.js库创建一个简单的拖拽生成场景的示例。three.js是一个基于WebGL的JavaScript库,它使得在浏览器中创建3D图形变得容易。结合OrbitControls.js,我们可以实现对场景中的对象...
在网页开发中,JavaScript是一种非常重要的脚本语言,它提供了丰富的功能,其中之一就是实现网页元素的拖拽排序。拖拽排序允许用户通过直观地拖动元素来改变它们在页面上的顺序,增强了用户体验。本文将深入探讨如何...
在JavaScript(JS)中实现表单的简单拖拽特效是一项常见的前端交互技术,它能够提升用户的操作体验,使用户能够通过鼠标轻松移动页面元素。在这个压缩包“JS实现的表单简单拖拽特效源码.zip”中,包含了必要的代码...
在这个“javascript 实现的层拖动简单实例”中,我们将探讨如何利用JavaScript来让一个div元素(通常被称为浮动层或浮窗)具有拖动能力。 首先,我们要理解`div`在HTML中的角色。`div`是一个块级元素,它允许开发者...
"jquery实现简单图片的拖动"这个主题是关于如何利用jQuery的API来实现图片元素的拖放功能,这是一个常见的交互设计,使得用户可以通过鼠标拖动图片在页面上自由移动。 在jQuery中,实现图片拖动主要涉及到`...
本文将深入探讨如何使用jQuery实现简单的拖拽效果,让你的网页元素能够随心所欲地移动。 首先,拖拽效果的核心在于捕获鼠标事件,包括`mousedown`(鼠标按下)、`mousemove`(鼠标移动)和`mouseup`(鼠标释放)。...
JavaScript 实现简单的拖拽效果是网页交互中常见的一种功能,主要通过监听鼠标事件来实现。在本实例中,我们将分析如何使用 JavaScript 和 CSS 创建一个可拖动的蓝色盒子。 首先,我们需要创建 HTML 结构,这里包含...
《jQuery.easyDrag.js:探索史上最强大的拖拽插件》 在Web开发中,交互性和用户体验是至关重要的元素,而拖放功能(Drag and Drop)无疑是提升用户体验的有效手段之一。jQuery库以其简洁的API和丰富的插件生态,为...
实现限定一定范围内进行拖拽操作,代码简单,易学易用!
本文将介绍如何使用纯JavaScript实现一个简单的拖拽效果,同时提供面向对象的方法来封装拖拽逻辑。 首先,实现一个基本的拖拽效果需要HTML、CSS和JavaScript三部分的配合。在HTML结构中,我们需要一个可拖拽的元素...
通过这篇文章,我们可以了解到如何使用JavaScript来实现一个简单的div拖拽功能。文章首先提供了实现该功能的HTML和CSS结构,然后通过JavaScript来添加拖拽功能的逻辑。 首先,页面中定义了一个div元素,并且通过CSS...
本文将详细介绍如何使用jQuery和JavaScript技术来实现在网页上的Table表格中,通过拖动表头来任意调整列宽度的功能,这个功能适用于各种列表页面,如数据展示、报表分析等场景。 首先,我们需要引入jQuery库,它是...
本文将深入探讨如何在Web前端实现拖放功能,通过实例分析不同实现方式的优缺点,帮助开发者选择最适合项目需求的解决方案。 首先,让我们了解拖放的基本原理。拖放功能涉及两个主要事件:`dragstart`、`drag`、`...
在这个主题中,我们将深入探讨如何利用ReactDnD来实现嵌套列表的拖拽排序。 首先,我们需要安装ReactDnD库。通过npm或yarn可以轻松完成: ```bash npm install react-dnd react-dnd-html5-backend # 或者 yarn add...
本文将探讨如何实现最简单的拖拽效果,适用于初学者理解和应用。 首先,我们需要了解拖拽涉及到的主要鼠标事件:`onmousedown`、`onmouseup` 和 `onmousemove`。当用户按下鼠标按钮(`onmousedown`)时,拖拽开始;...
总的来说,"Three.JS+原生JS+jQuery实现3D机房"项目展示了WebGL和JavaScript在构建交互式3D应用中的强大能力。开发者可以利用这些工具和技术,创造出各种具有实际业务功能的3D可视化场景。无论是对于展示数据中心的...
以下是一个简单的SVG拖拽效果的JavaScript实现: ```html const draggableRect = document.querySelector('#draggable'); let isDragging = false; let initialMouseX, initialMouseY; draggableRect...