`
yangsp1
  • 浏览: 48007 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaScript 拖放效果系列四——获得元素的位置

    博客分类:
  • js
阅读更多
原文来自:http://www.cainiao8.com/web/js_examples/21_tuozhuai4.html


在第一节我们实现了基本的拖拽效果的时候,window.onload事件的响应函数定义如下:

window.onload = function(){
	test = document.getElementById("test");
	test.onmousedown = down;
	test.onmousemove = move;
	document.onmouseup = up;

        //下面三行被标出。本页中颜色无法显示
	test.style.position = "relative";
	test.style.top = "0px";
	test.style.left = "0px";
}


注意重点标出的三行代码,我们给元素设置了relative的position属性,这是由于元素只有定义了position属性,它的top和left属性才会有效,才能进一步地制作拖拽的效果。因此给元素假定定位为relative实在是迫于无奈,只能牺牲一些灵活性(当然也可以指定为 absolute,要根据实际情况)。

之后我们又设定元素的top和left属性都为0px,这是为了方便后面的代码获得这两个CSS属性,简化了代码。但是这同时给使用这段代码的文档提了一个要求——要拖拽的元素必须设置top和left属性为0。这显然是一个不太合理的要求。
解决问题

我们在上一个例子中已经看到如何跨浏览器地利用JavaScript获得元素的CSS属性了。现在就来稍稍修改上一个例子中的函数来,让它服务于我们的拖拽代码:

<script type="text/javascript">
……
function dragInit(node){
	if(node.className == "drag"){ 
		……
		//仍然要求元素是relative定位
		node.style.position = "relative";
		node.dragging = false;
	}
	var children = node.childNodes;
	for(var i = 0;i < children.length; i++){
		dragInit(children[i]);
	}
}
window.onload = function(){
	dragInit(document);
	document.onmouseup = docUp;
}
function down(event)
{	
	event = event || window.event; 
	dragElement = this;
	mouseX = parseInt(event.clientX);
	mouseY = parseInt(event.clientY);
	objY = parseInt(getNodeStyle(dragElement,"top"));
	objX = parseInt(getNodeStyle(dragElement,"left"));
	//IE不返回未设置的CSS属性
	if(!objY)objY=0;
	if(!objX)objX=0;
	this.style.zIndex = max++;
}
……
function getNodeStyle(node,styleName){
	var realStyle = null;
	if(node.currentStyle){
		realStyle = node.currentStyle[styleNmae];
	}else if(window.getComputedStyle){
		realStyle = window.getComputedStyle(node,null)[styleName];
	}
	return realStyle;
}


可以看到,我们使用getNodeStyle函数来获得元素的CSS属性值,这样我们的代码就可以适用于事先设置了top和left定位值的元素了。我做了一个测试页面,给两个可拖拽的div分别设置了如下的CSS规则:

<style type="text/css">
.drag{border:1px solid; width:400px; background:#CCCCCC;}
#test1{ top:20px;}
#test2{ left:40px;}
</style>


点击进入测试页面。这样,我们的拖拽代码又改进了一小步。
JavaScript拖拽系列

   1. JavaScript拖拽
   2. JavaScript拖拽2——多元素、分离JS
   3. JavaScript拖拽3——解决快速拖拽的问题
   4. JavaScript拖拽4——获得元素的位置
   5. JavaScript拖拽5——性能优化
   6. JavaScript拖拽6——修复错误
分享到:
评论

相关推荐

    一个JavaScript库让文件能够拖放到任何HTML元素上

    标题中的“一个JavaScript库让文件能够拖放到任何HTML元素上”指的是使用JavaScript库来实现HTML5的拖放功能,使得用户可以通过鼠标拖动文件到指定的HTML元素(如div、input等)上,从而实现文件上传或其他交互操作...

    众妙之门——JavaScript与jQuery技术精粹

    《众妙之门——JavaScript与jQuery技术精粹》是一本由Smashing Magazine出版的高端IT图书,它汇聚了全球顶尖网站设计专家的经验与智慧,旨在深入解析JavaScript和jQuery的关键技术,帮助读者提升在网页设计与开发中...

    精通JavaScript ——动态网页(实例版)详尽实例

    本书“精通JavaScript ——动态网页(实例版)”旨在通过详尽的实例帮助读者深入理解和熟练掌握JavaScript的核心概念和应用。 首先,我们从基础开始,JavaScript是一种解释型、面向对象的弱类型脚本语言。它的灵活性...

    浅谈JavaScript库——jQuery,ExtJs的对比研究.pdf

    JavaScript库通常提供了一些基本功能,如命名空间支持、JavaScript可用性增强工具、用户界面组件、拖放组件、视觉效果和动画、布局管理工具、元素样式操作、AJAX支持、DOM支持、事件处理增强工具、操作日志和调试...

    小议JavaScript库——Dojo、jQuery和PrototypeJS的比较.pdf

    JavaScript 库比较 —— Dojo、jQuery 和 PrototypeJS 在当今的 Web 开发中,JavaScript 库扮演着越来越重要的角色。这些库提供了许多有用的功能,可以帮助开发者快速构建 Web 应用程序。本文将对 Dojo、jQuery 和 ...

    dragsvg 实现拖放、拉伸

    `jquery.js`是jQuery库的核心文件,包含了一系列方便的JavaScript函数,用于DOM操作、事件处理、动画效果等。在这些文件中,jQuery被用来简化代码,提高效率,使得拖放和拉伸的实现更加优雅和简洁。 通过比较这三个...

    谈谈对JavaScript原生拖放的深入理解

     拖放(drag-and-drop,DnD)其实是两个动作——拖和放。所以,它涉及到两个元素。一个是被拖的元素,称为拖放源;另一个是要放的目标,称为拖放目标。本文将通过拆分这两个概念来详细介绍原生拖放 拖放源  什么样...

    从入门到精通HTML5——PDF——网盘链接

     2.3.12 设置网页的过渡效果 26  2.4 基底网址标记&lt;base&gt; 29  2.5 页面的主体标记&lt;body&gt; 30  2.5.1 设置文字颜色——text 31  2.5.2 背景颜色属性——bgcolor 32  2.5.3 背景图像属性——...

    javascript经典特效---可移动的页面窗口.rar

    "JavaScript经典特效——可移动的页面窗口"是一个关于利用JavaScript技术实现网页元素动态移动的教程。在网页设计中,创建可移动的页面窗口可以提供更交互式的用户体验,让用户能够自由调整窗口的位置,满足个性化...

    accessible-drag-and-drop:扩展 HTML5 拖放功能——因此它可以处理多个元素,并支持键盘交互

    6. **CSS样式**:为了提供视觉反馈,项目可能会用到CSS来改变拖动元素和目标元素的样式,比如添加拖动时的高亮效果。 7. **JavaScript库或框架**:虽然没有明确提及,但实现这样的功能可能需要用到jQuery或其他...

    星空——登录页面

    例如,使用JavaScript定时器来改变星星的位置,或者利用CSS3的`animation`属性制作星光闪烁的效果。 6. **表单元素设计**: 登录界面通常包含用户名和密码输入框、登录按钮以及可能的记住密码和忘记密码链接。这些...

    displaceable一个小巧高性能且可配置的JavaScript库可在鼠标移动时平滑移动元素

    《displaceable:轻量级高性能的JavaScript库——实现鼠标移动元素平滑移动的魔法》 在现代网页设计中,动态交互元素已经成为提升用户体验的重要手段。"displaceable"作为一个小巧而高性能的JavaScript库,正是为此...

    DragTest.zip

    JavaScript拖放功能是HTML5引入的一项重要特性,允许用户通过鼠标或触摸设备对网页上的元素进行拖动,并将它们放置到其他位置。这一功能由一系列的事件、接口和方法组成,提供了强大的灵活性和定制性。 首先,拖放...

    Web客户端开发——HTML5+CSS+JavaScript实例教程.rar

    在HTML5环境中,JavaScript得到了进一步强化,提供了新的API,如Web Storage(本地存储)、WebSocket(实时双向通信)、Geolocation(地理位置定位)和Web Workers(后台多线程处理)。此外,框架和库如jQuery、...

    HTML5+CSS3+JavaScript网页设计案例课堂-课本源代码.zip

    这个"HTML5+CSS3+JavaScript网页设计案例课堂-课本源代码.zip"压缩包很可能是用于教学或自学目的的资源,包含了一系列实际的网页设计案例和源代码。 HTML5作为最新的超文本标记语言版本,它引入了许多新特性,如...

    Javascript特效代码大全

    6. **拖放功能**:JavaScript支持拖放API,使得用户可以方便地拖动网页元素,常用于文件上传、布局调整等场景。 7. **图形绘制**:利用Canvas或SVG,JavaScript可以实现强大的图形绘制功能,制作图表、游戏、甚至...

    由约翰尼五世和布洛克利主演的拖放式机器人教育图书馆(人群疯狂)_whole-npm_JavaScript_下载.zip

    《拖放式机器人教育图书馆——JavaScript编程的奇妙世界》 在信息技术日新月异的今天,编程已经成为一种必备技能,而JavaScript作为Web开发的核心语言,更是受到广泛关注。这个名为"由约翰尼五世和布洛克利主演的...

    JavaScript常用特效精华

    3. **动画效果**:JavaScript可以创建平滑的页面动画,通过改变元素的位置、大小、透明度等属性。常见的动画库如jQuery和GreenSock提供了一系列简便的方法,而原生JavaScript则可以通过`requestAnimationFrame()`来...

    实现google那种拖拉效果 jquery.easywidgets.js实例

    在本文中,我们将深入探讨如何实现类似于Google那样的拖放效果,使用的是jQuery库的一个扩展插件——jquery.easywidgets.js。这个插件为开发者提供了一种简单的方法来创建具有交互性的拖放功能,使得用户界面更加...

Global site tag (gtag.js) - Google Analytics