原文来自:
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库来实现HTML5的拖放功能,使得用户可以通过鼠标拖动文件到指定的HTML元素(如div、input等)上,从而实现文件上传或其他交互操作...
拖放功能在AJAX应用中是一个常见的交互方式,它允许用户通过鼠标操作将元素在界面上移动到指定位置。然而,由于实现复杂性,很多开发者倾向于使用第三方框架来处理拖放功能。这篇文章深入解析了.NET AJAX Futures ...
《众妙之门——JavaScript与jQuery技术精粹》是一本由Smashing Magazine出版的高端IT图书,它汇聚了全球顶尖网站设计专家的经验与智慧,旨在深入解析JavaScript和jQuery的关键技术,帮助读者提升在网页设计与开发中...
本书“精通JavaScript ——动态网页(实例版)”旨在通过详尽的实例帮助读者深入理解和熟练掌握JavaScript的核心概念和应用。 首先,我们从基础开始,JavaScript是一种解释型、面向对象的弱类型脚本语言。它的灵活性...
JavaScript库通常提供了一些基本功能,如命名空间支持、JavaScript可用性增强工具、用户界面组件、拖放组件、视觉效果和动画、布局管理工具、元素样式操作、AJAX支持、DOM支持、事件处理增强工具、操作日志和调试...
JavaScript 库比较 —— Dojo、jQuery 和 PrototypeJS 在当今的 Web 开发中,JavaScript 库扮演着越来越重要的角色。这些库提供了许多有用的功能,可以帮助开发者快速构建 Web 应用程序。本文将对 Dojo、jQuery 和 ...
`jquery.js`是jQuery库的核心文件,包含了一系列方便的JavaScript函数,用于DOM操作、事件处理、动画效果等。在这些文件中,jQuery被用来简化代码,提高效率,使得拖放和拉伸的实现更加优雅和简洁。 通过比较这三个...
拖放(drag-and-drop,DnD)其实是两个动作——拖和放。所以,它涉及到两个元素。一个是被拖的元素,称为拖放源;另一个是要放的目标,称为拖放目标。本文将通过拆分这两个概念来详细介绍原生拖放 拖放源 什么样...
2.3.12 设置网页的过渡效果 26 2.4 基底网址标记<base> 29 2.5 页面的主体标记<body> 30 2.5.1 设置文字颜色——text 31 2.5.2 背景颜色属性——bgcolor 32 2.5.3 背景图像属性——...
"JavaScript经典特效——可移动的页面窗口"是一个关于利用JavaScript技术实现网页元素动态移动的教程。在网页设计中,创建可移动的页面窗口可以提供更交互式的用户体验,让用户能够自由调整窗口的位置,满足个性化...
6. **CSS样式**:为了提供视觉反馈,项目可能会用到CSS来改变拖动元素和目标元素的样式,比如添加拖动时的高亮效果。 7. **JavaScript库或框架**:虽然没有明确提及,但实现这样的功能可能需要用到jQuery或其他...
例如,使用JavaScript定时器来改变星星的位置,或者利用CSS3的`animation`属性制作星光闪烁的效果。 6. **表单元素设计**: 登录界面通常包含用户名和密码输入框、登录按钮以及可能的记住密码和忘记密码链接。这些...
《displaceable:轻量级高性能的JavaScript库——实现鼠标移动元素平滑移动的魔法》 在现代网页设计中,动态交互元素已经成为提升用户体验的重要手段。"displaceable"作为一个小巧而高性能的JavaScript库,正是为此...
JavaScript拖放功能是HTML5引入的一项重要特性,允许用户通过鼠标或触摸设备对网页上的元素进行拖动,并将它们放置到其他位置。这一功能由一系列的事件、接口和方法组成,提供了强大的灵活性和定制性。 首先,拖放...
在HTML5环境中,JavaScript得到了进一步强化,提供了新的API,如Web Storage(本地存储)、WebSocket(实时双向通信)、Geolocation(地理位置定位)和Web Workers(后台多线程处理)。此外,框架和库如jQuery、...
在本文中,我们将探讨jQuery中的一个重要特性——拖放功能,以及一系列相关的jQuery插件。 首先,jQuery的拖放功能通常通过jQuery UI库实现,它提供了易于使用的API来创建可拖动的元素。然而,除了jQuery UI,还有...
这个"HTML5+CSS3+JavaScript网页设计案例课堂-课本源代码.zip"压缩包很可能是用于教学或自学目的的资源,包含了一系列实际的网页设计案例和源代码。 HTML5作为最新的超文本标记语言版本,它引入了许多新特性,如...
6. **拖放功能**:JavaScript支持拖放API,使得用户可以方便地拖动网页元素,常用于文件上传、布局调整等场景。 7. **图形绘制**:利用Canvas或SVG,JavaScript可以实现强大的图形绘制功能,制作图表、游戏、甚至...
《拖放式机器人教育图书馆——JavaScript编程的奇妙世界》 在信息技术日新月异的今天,编程已经成为一种必备技能,而JavaScript作为Web开发的核心语言,更是受到广泛关注。这个名为"由约翰尼五世和布洛克利主演的...
3. **动画效果**:JavaScript可以创建平滑的页面动画,通过改变元素的位置、大小、透明度等属性。常见的动画库如jQuery和GreenSock提供了一系列简便的方法,而原生JavaScript则可以通过`requestAnimationFrame()`来...