<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<title>JavaScript Google IG Drag Demo</title>
<meta http-equiv="Content-Language" content="zh-cn" />
<meta name="keywords" content="JavaScript 拖拽 Drag Demo google" />
<meta name="author" content="Phzzy (PhzzyZhou [At] gmail [dot] com)" />
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript" src="drag.js"></script>
<script type="text/javascript" src="google_drag.js"></script>
<script type="text/javascript" language="javascript">
//获取浏览器类型
function getBrowserOS()
{
if(navigator.userAgent.indexOf('MSIE')>-1)return 'MSIE';
if(navigator.userAgent.indexOf('Firefox')>-1)return 'Firefox';
if(isSafari=navigator.userAgent.indexOf("Safari")>0)return 'Safari';
if(isCamino=navigator.userAgent.indexOf("Camino")>0)return 'Camino';
if(isMozilla=navigator.userAgent.indexOf("Gecko/")>0)return 'Gecko';
if(navigator.userAgent.indexOf('Opera')>-1)return 'Opera';
return 'Other';
}
</script>
<script type="text/javascript" language="javascript">
//获取值
DragUtil.getSortIndex = function(){
var col_array = [ 'col_div1' , 'col_div2'];
var sortIndex = '';
for(var i = 0; i < col_array.length ; i++)
{
sortIndex += col_array[i] + ":";
var childs = document.getElementsByClassName('hiddvalue' , col_array[i]);
for(var j = 0 ; j < childs.length ; j++)
{
if(!Element.hasClassName(childs[j] , 'no_drag'))
{
sortIndex += childs[j].value + ',' ;
}
}
sortIndex += "\n";
}
return sortIndex;
}
function GetData()
{
}
function Showupdate( a1, a2, a3)
{
EditPage = document.getElementById('divshow');
var scrollPos;
if (typeof window.pageYOffset != 'undefined')
{
scrollPos = window.pageYOffset;
}
else if (typeof document.compatMode != 'undefined' && document.compatMode != 'BackCompat')
{
scrollPos = document.documentElement.scrollTop;
}
else if (typeof document.body != 'undefined')
{
scrollPos = document.body.scrollTop;
}
EditPage.style.top = scrollPos + 20 +"px";
EditPage.style.zIndex= 101;
EditPage.style.display = '';
//添加一个层,用于挡住以前的东西
BackDiv = document.createElement('DIV');
var xScroll, yScroll;
if (window.innerHeight && window.scrollMaxY)
{
xScroll = document.body.scrollWidth;
yScroll = window.innerHeight + window.scrollMaxY;
} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
xScroll = document.body.scrollWidth;
yScroll = document.body.scrollHeight;
} else
{ // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
xScroll = document.body.offsetWidth;
yScroll = document.body.offsetHeight;
}
BackDiv.style.cssText = 'position:absolute;background-color: #ffffff; top: 0px; left:0px; width: '+ xScroll + 'px; height:'+ yScroll + 'px;';
BackDiv.id = 'divback';
//设置页面透明
if(getBrowserOS().toUpperCase() == 'FIREFOX')
{
BackDiv.style.MozOpacity = '0.8';
}
else
{
BackDiv.style.filter="alpha(opacity=80)";
}
document.body.appendChild(BackDiv);
EditTitle = document.getElementById('lbltitle');
EditTitle.innerHTML = a1;
}
function EditClose()
{
EditPage = document.getElementById('divshow');
BackDiv = document.getElementById('divback');
EditPage.style.display = 'none';
//设置页面透明
BackDiv.parentNode.removeChild(BackDiv);
}
</script>
<style type="text/css">
#title{ border-bottom:1px solid #bbb; font-size:12px; padding:0 0 10px;}
#title h1{ font-size:16px;}
#title #intro{}
#center{ width:800px; margin:auto}
#col_div1{ float:left; width:400px; color:#000000;}
#col_div2{ float:right; width:400px; color:#000000;}
.drag_div , .modbox{ width:95%; margin:10px auto; border:1px solid #1b243d; padding:0px;}
.drag_header{ font-weight:bold; border-bottom:1px solid #000000; }
.drag_content{ height:40px; padding:5px;cursor:pointer; background:#FFFFFF}
.no_drag{ height:0px; overflow:hidden; padding:0; border:0;}
</style>
</head>
<body>
<div id="title">
<h1>
JavaScript Google IG Drag Demo</h1>
<div id="intro">
<strong>Author:</strong> <a href="http://www.phzzy.org" title="Phzzy.ORG">Phzzy</a><br />
<strong>Last Modify:</strong> 2007-01-24 22:20<br />
这是一个关于 JavaScript 仿 google 个性化主页拖拽效果的简单的 Demo,在 IE 6 , FireFox 1.5 , Opera 9 下测试通过。<br />
文章链接: <a href="http://www.phzzy.org/blog/drag-google-ig/" title="JavaScript Drag">http://www.phzzy.org/blog/drag-google-ig/</a>
<input type="button" value="遍历所有可拖拽元素,获得顺序" onclick="javascript:alert(DragUtil.getSortIndex());" />
</div>
</div>
<div id="center">
<div id="col_div1" class="col_div">
<!-- 用 JavaScript 绘制 5 个 div -->
<script type="text/javascript">
for(var i = 0 ; i < 9 ; i++)
{
document.write('<div id="drag_' + i + '" class="drag_div" style="background:#F50;">'
+ '<input class="hiddvalue" value="value_'+i+'" type="hidden" />'
+ '<div id="drag_' + i + '_h" class="drag_header" >Header #' + i + '</div>'
+ '<div class="drag_content" onclick="Showupdate('+i+','+i+','+i+')">Content #' + i + '</div>'
+ '</div>');
}
</script>
<!-- 隐藏的 div ,用来修复不能拖到一个元素后面的 bug -->
<div id="col_1_hidden_div" class="drag_div no_drag">
<div id="col_1_hidden_div_h">
</div>
</div>
</div>
<div id="col_div2" class="col_div">
<script type="text/javascript">
for(var i = 10 ; i < 19 ; i++){
document.write('<div id="drag_' + i + '" class="drag_div" style="background:#00CC00;">'
+ '<input class="hiddvalue" value="value_' + i + '" type="hidden" />'
+ '<div id="drag_' + i + '_h" class="drag_header">Header #' + i + '</div>'
+ '<div class="drag_content" onclick="Showupdate('+i+','+i+','+i+')">Content #' + i + '</div>'
+ '</div>');
}
</script>
<!-- 隐藏的 div ,用来修复不能拖到一个元素后面的 bug -->
<div id="col_2_hidden_div" class="drag_div no_drag">
<div id="col_2_hidden_div_h">
</div>
</div>
</div>
<!-- 编辑页面 -->
<div style="z-index: 101; left: 100px; position: absolute; width: 798px; height: 536px;
display: none; background-color: #ffffff; border: #72899D 1px solid; top: 20px;"
id="divshow" align="center">
<table>
<tr>
<td style="width: 342px">
</td>
<td align="right" style="width: 342px">
<input id="btnEditClose" type="button" onclick="EditClose()" value="关闭" />
</td>
</tr>
<tr>
<td colspan="2" align="center">
<label id="lbltitle">
</label>
</td>
js做的拖动层,象google
需积分: 0 146 浏览量
更新于2009-02-07
收藏 24KB RAR 举报
在JavaScript的世界里,拖动层(Draggable Layer)是一种常见的交互设计,它允许用户通过鼠标或触屏设备来移动页面上的元素。这种技术在许多Web应用和网站中都有广泛的应用,比如Google的一些产品就采用了这样的设计,使得用户可以自由地调整窗口的位置。本教程将深入探讨如何使用JavaScript实现一个类似Google的拖动层功能。
我们需要理解拖动层的基本原理。拖动层的核心是监听鼠标的`mousedown`、`mousemove`和`mouseup`事件。当用户按下鼠标按钮时,我们记录下当前的鼠标位置和层的位置;在鼠标移动期间,我们将移动量与初始位置相加,更新层的位置;当用户释放鼠标时,停止更新。
以下是一个简单的实现步骤:
1. **选择目标元素**:我们需要选取要变为可拖动的层。这通常可以通过获取DOM元素的引用来完成,例如通过`document.getElementById`或`querySelector`。
2. **绑定事件**:为选中的元素添加`mousedown`事件监听器。在事件处理函数中,记录当前的鼠标位置(`event.clientX`和`event.clientY`)以及层的初始位置(`offsetTop`和`offsetLeft`)。
3. **处理`mousemove`事件**:添加`mousemove`事件监听器。当鼠标移动时,计算鼠标相对于初始位置的偏移,并将这个偏移应用到层的位置上,通常是通过修改CSS的`top`和`left`属性。
4. **结束拖动**:添加`mouseup`事件监听器,这可以在文档级别上进行,以确保即使鼠标离开层也能正常工作。在`mouseup`事件的处理函数中,解除对`mousemove`事件的监听。
```javascript
let dragElement = document.getElementById('draggable');
let initialX, initialY;
dragElement.addEventListener('mousedown', function(event) {
initialX = event.clientX - dragElement.offsetLeft;
initialY = event.clientY - dragElement.offsetTop;
document.addEventListener('mousemove', handleMouseMove);
});
document.addEventListener('mouseup', function() {
document.removeEventListener('mousemove', handleMouseMove);
});
function handleMouseMove(event) {
dragElement.style.left = event.clientX - initialX + 'px';
dragElement.style.top = event.clientY - initialY + 'px';
}
```
为了使拖动层更完善,我们还需要考虑一些额外的细节:
- **边界限制**:可能需要限制层的移动范围,使其不能超出父容器的边界。
- **阻止默认行为**:防止鼠标按下时触发其他可能的动作,如链接跳转,可以通过`event.preventDefault()`实现。
- **触摸设备支持**:对于触摸设备,需要监听`touchstart`、`touchmove`和`touchend`事件。
- **响应式设计**:考虑不同屏幕尺寸和设备方向下的拖动体验。
- **流畅动画**:在移动过程中,可以使用requestAnimationFrame实现平滑的动画效果。
在提供的压缩包文件"拖动层"中,可能包含了实现这一功能的示例代码和资源。通过分析和学习这些代码,你可以更好地理解拖动层的实现过程,并根据项目需求进行定制。在实际应用中,还可以结合现代前端框架如React、Vue或Angular,利用它们的生命周期方法和事件系统来封装组件,提高代码的复用性和可维护性。
hnpost
- 粉丝: 0
- 资源: 5
最新资源
- 2015年1月至10月中国移动互联网新闻客户端发展分析报告.pdf
- 2015年EF英语熟练度指标报告.pdf
- 2015年Q1-Q3今日头条用户质量报告.pdf
- 2015年Q4中国在线电影购票专题研究报告.pdf
- 2015年第四季度房产行业研究报告.pdf
- 2015年度中国智能路由器市场监测报告.pdf
- 2015年领英中国互联网行业人才库报告.pdf
- 2015年领英中国汽车行业才库报告.pdf
- 2015年领英中国⾼高科技制造⾏行业⼈人才库报告.pdf
- 12-stm32-23123213
- HTML5实现好看的中秋节网页源码.zip
- 南邮2025Linux练习题
- 韩国2024年OSM矢量数据集(包含poi、路网、河道、绿地、交通场站等基础shp数据)
- 2015年全行业异合作分析报告.pdf
- 2015年双十一中国移动互联网电商行业发展分析报告.pdf
- 2015年十一长假中国移动互联网用户行为分析报告.pdf