`
cenhonggang86830
  • 浏览: 45226 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

js实现最简单的拖拽

    博客分类:
  • Java
阅读更多
关于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:由于代码高亮插件的原因,遮罩层上会有白色小方块,暂没做处理。。。
分享到:
评论

相关推荐

    js实现简单div拖拽功能实例.docx

    JavaScript 实现简单的 Div 拖拽功能是一种常见的交互设计,常用于网页上的可操作元素,如窗口、面板或自定义控件。以下是对这个实例的详细解析: 首先,我们需要一个包含拖拽功能的 Div 元素。在 HTML 中,我们...

    js简单实现拖动

    本文将详细讲解如何使用纯JavaScript来实现一个简单的拖动功能,并通过实例代码进行解析。 首先,我们需要理解拖动的基本原理。拖动操作涉及到鼠标事件(如`mousedown`、`mousemove`和`mouseup`)以及元素的位置...

    three.js拖拽生成场景简单示例

    在本文中,我们将深入探讨如何使用three.js库创建一个简单的拖拽生成场景的示例。three.js是一个基于WebGL的JavaScript库,它使得在浏览器中创建3D图形变得容易。结合OrbitControls.js,我们可以实现对场景中的对象...

    Javascript实现网页元素拖拽排序

    在网页开发中,JavaScript是一种非常重要的脚本语言,它提供了丰富的功能,其中之一就是实现网页元素的拖拽排序。拖拽排序允许用户通过直观地拖动元素来改变它们在页面上的顺序,增强了用户体验。本文将深入探讨如何...

    JS实现的表单简单拖拽特效源码.zip

    在JavaScript(JS)中实现表单的简单拖拽特效是一项常见的前端交互技术,它能够提升用户的操作体验,使用户能够通过鼠标轻松移动页面元素。在这个压缩包“JS实现的表单简单拖拽特效源码.zip”中,包含了必要的代码...

    javascript 实现的层拖动简单实例

    在这个“javascript 实现的层拖动简单实例”中,我们将探讨如何利用JavaScript来让一个div元素(通常被称为浮动层或浮窗)具有拖动能力。 首先,我们要理解`div`在HTML中的角色。`div`是一个块级元素,它允许开发者...

    jquery实现简单图片的拖动

    "jquery实现简单图片的拖动"这个主题是关于如何利用jQuery的API来实现图片元素的拖放功能,这是一个常见的交互设计,使得用户可以通过鼠标拖动图片在页面上自由移动。 在jQuery中,实现图片拖动主要涉及到`...

    jquery简单实现拖拽效果

    本文将深入探讨如何使用jQuery实现简单的拖拽效果,让你的网页元素能够随心所欲地移动。 首先,拖拽效果的核心在于捕获鼠标事件,包括`mousedown`(鼠标按下)、`mousemove`(鼠标移动)和`mouseup`(鼠标释放)。...

    【JavaScript源代码】JavaScript实现简单拖拽效果.docx

    JavaScript 实现简单的拖拽效果是网页交互中常见的一种功能,主要通过监听鼠标事件来实现。在本实例中,我们将分析如何使用 JavaScript 和 CSS 创建一个可拖动的蓝色盒子。 首先,我们需要创建 HTML 结构,这里包含...

    jquery.easyDrag.js史上最强大的拖拽插件

    《jQuery.easyDrag.js:探索史上最强大的拖拽插件》 在Web开发中,交互性和用户体验是至关重要的元素,而拖放功能(Drag and Drop)无疑是提升用户体验的有效手段之一。jQuery库以其简洁的API和丰富的插件生态,为...

    js实现限定范围拖拽.html

    实现限定一定范围内进行拖拽操作,代码简单,易学易用!

    使用js实现的简单拖拽效果

    本文将介绍如何使用纯JavaScript实现一个简单的拖拽效果,同时提供面向对象的方法来封装拖拽逻辑。 首先,实现一个基本的拖拽效果需要HTML、CSS和JavaScript三部分的配合。在HTML结构中,我们需要一个可拖拽的元素...

    js实现简单div拖拽功能实例

    通过这篇文章,我们可以了解到如何使用JavaScript来实现一个简单的div拖拽功能。文章首先提供了实现该功能的HTML和CSS结构,然后通过JavaScript来添加拖拽功能的逻辑。 首先,页面中定义了一个div元素,并且通过CSS...

    Web 前端拖拽实现实例分析

    本文将深入探讨如何在Web前端实现拖放功能,通过实例分析不同实现方式的优缺点,帮助开发者选择最适合项目需求的解决方案。 首先,让我们了解拖放的基本原理。拖放功能涉及两个主要事件:`dragstart`、`drag`、`...

    jQuery+js 实现Table表格可任意拖动调整列宽度大小 适用于列表页等表头拖动宽度设置

    本文将详细介绍如何使用jQuery和JavaScript技术来实现在网页上的Table表格中,通过拖动表头来任意调整列宽度的功能,这个功能适用于各种列表页面,如数据展示、报表分析等场景。 首先,我们需要引入jQuery库,它是...

    学习使用ReactDnD实现嵌套列表的拖拽排序

    在这个主题中,我们将深入探讨如何利用ReactDnD来实现嵌套列表的拖拽排序。 首先,我们需要安装ReactDnD库。通过npm或yarn可以轻松完成: ```bash npm install react-dnd react-dnd-html5-backend # 或者 yarn add...

    js最简单的拖拽效果实现代码

    本文将探讨如何实现最简单的拖拽效果,适用于初学者理解和应用。 首先,我们需要了解拖拽涉及到的主要鼠标事件:`onmousedown`、`onmouseup` 和 `onmousemove`。当用户按下鼠标按钮(`onmousedown`)时,拖拽开始;...

    Three.JS+原生JS+jQuery实现3D机房

    总的来说,"Three.JS+原生JS+jQuery实现3D机房"项目展示了WebGL和JavaScript在构建交互式3D应用中的强大能力。开发者可以利用这些工具和技术,创造出各种具有实际业务功能的3D可视化场景。无论是对于展示数据中心的...

    最简单的微信小程序拖拽排序列表.zip

    在这个案例中,我们主要关注JS文件的编写,因为拖拽排序功能主要通过JavaScript来实现。 一、基础配置 在`app.json`或`project.config.json`中,开启拖拽功能: ```json { "debug": false, "miniprogramRoot": "....

Global site tag (gtag.js) - Google Analytics