文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院网络编程Scriptjavascript实现类似google和msn space的拖拽
精品推荐
特别推荐
·主页javascript特效19则
·各种网页媒体播放器代码及详解
·用户体验:JS实现仿新浪信息提示效果
·网页特效:图片随机显示实例详解
·JavaScript入门学习书籍的阶段选择
·Javascript代码轻松隐藏网页源文件
·网页制作:JavaScript仿Windows关机效果
·网页制作Javascript经典小技巧总结
·JavaScript的9个陷阱及评点
·简单介绍用JSP来实现文件下载功能的几种方式
·网页播放器实现全屏的方法总结
·菜鸟学习javascript实例教程
·JavaScript 经典代码大全
·汇总:一些不错的使用频率比较高的JS函数
·Javascript模拟的DOS窗口
·JavaScript仿Windows关机效果
·仿windows选项卡效果拾零
·JavaScript经典效果集锦
·jscript/javascript条件编译
·Js之软键盘实现(源码)
热点TOP10
·javascript 常用代码大全
·javascript 动态添加表格行
·一个很好的日历控件(采用javascript编写)
·Golive CS2视频教程:JavaScript插件
·JavaScript经典效果集锦
·HTC——浏览器上的舞者
·Java一点通:中文识别问题全解决办法
·我学习使用java的一点体会(三)
·学习JavaScript的事件
·JavaScript Dom编程:介绍学习书籍
·基于javascript的拼音字典及应用举例
·JS分层的概念与本地存贮
·Javascript实现打印网页中定义的部分内容
·JavaScript/JS实现标题栏跑马灯
·JavaScript中split字符串函数
·JavaScript中sort排序函数
·B/S开发常用JavaScript技术
·用confirm确认提交动作,提交确认提示
·JavaScript判断Form中的Radio是否有未选中的
·实例分析:仿6room网站图片链接效果

javascript实现类似google和msn space的拖拽

日期:2006年7月26日 作者: 查看:[大字体 中字体 小字体]


     最近在网上看到一些朋友到处找类似于google的个性主页和msn space的拖拽实现,在下正好也找到了一个例子.但是问题比较多.我将其改写并完善,建立了一个通用的函数.具体的函数实现如下:

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<title>BlackSoul的拖拽Demo</title>

<!--

 ____________________________________

--------Author By BlackSoul---------

------------2006.03.30--------------

--------BlackSoulylk@gmail.com------

------------QQ:9136194--------------

------http://blacksoul.cnblogs.cn---

======================================

-->

<style type="text/css">

body

{

    margin:0px;

}

 

#aim /*设置目标层样式*/

{

    position:absolute;/*控制层的位置所必须的style*/

    width:200px;

    height:30px;

    border:1px solid #666666;

    background-color:#FFCCCC;

}

 

#sourceLayer, #cloneLayer

{

    position:absolute;/*控制层的位置所必须的style*/

    width:300px;

    height:50px;

    border:1px solid #666666;

    background-color:#CCCCCC;

    cursor:move;

}

 

.docked

{

    display:none;

    filter:alpha(opacity=100);

}

 

.actived

{

    display:block;

    filter:alpha(opacity=70);

}

</style>

</head>

 

<body >

 

<div id="aim">放置范围</div>

<div id="sourceLayer" unselectable="off"><img src="http://blacksoul.gamenews.cn/mail.png" alt="拖拽Demo">拖拽Demo源</div>

<div id="cloneLayer" class="docked" unselectable="off"></div>

 

<script type="text/javascript" language="javascript">

<!--

/*

 ====================================

--------Author By BlackSoul---------

------------2006.03.30--------------

--------BlackSoulylk@gmail.com------

------------QQ:9136194--------------

------http://blacksoul.cnblogs.cn---

 ====================================

*/

//设置层对象

var aim;

var sourceLayer;

var cloneLayer;

 

//定义各个层初始位置

var aimX;

var aimY;

var orgnX;

var orgnY;

 

//拖拽过程中的变量

var draging = false; //是否处于拖拽中

var offsetX = 0;     //X方向左右偏移量

var offsetY = 0;     //Y方向上下偏移量

var back;            //返回动画对象

var thisX ;          //当前clone层的X位置

var thisY ;          //当前clone层的Y位置

var time ;

var stepX ;          //位移速度

var stepY ;          //位移速度

 

//初始化拖拽信息

/*

  initAimX 目标x坐标

  initAimY 目标y坐标

  initOrgnX 拖拽源x坐标

  initOrgnY 拖拽源y坐标

*/

//获得层对象

 

function getLayer(inAim,inSource,inClone)

{

    aim = document.getElementById(inAim);

    sourceLayer = document.getElementById(inSource);

    cloneLayer = document.getElementById(inClone);

}

 

function initDrag(initAimX,initAimY,initOrgnX,initOrgnY)

{

    aimX = initAimX;

    aimY = initAimY;

    orgnX = initOrgnX;

    orgnY = initOrgnY;

    //设置各个开始层的位置

    aim.style.pixelLeft = aimX;

    aim.style.pixelTop = aimY;

    sourceLayer.style.pixelLeft = orgnX;

    sourceLayer.style.pixelTop = orgnY;

    cloneLayer.style.pixelLeft = orgnX;

    cloneLayer.style.pixelTop = orgnY;

}

 

//准备拖拽

function BeforeDrag()

{

    if (event.button != 1)

    {

        return;

    }

    cloneLayer.innerHTML = sourceLayer.innerHTML; //复制拖拽源内容

    offsetX = document.body.scrollLeft + event.clientX - sourceLayer.style.pixelLeft;

    offsetY = document.body.scrollTop + event.clientY - sourceLayer.style.pixelTop;

    cloneLayer.className = "actived";

    draging = true;

}

 

//拖拽中

function OnDrag()

{

    if(!draging)

    {

        return;

    }

    //更新位置

    event.returnValue = false;

    cloneLayer.style.pixelLeft = document.body.scrollLeft + event.clientX - offsetX;

    cloneLayer.style.pixelTop = document.body.scrollTop + event.clientY - offsetY;

}

 

//结束拖拽

function EndDrag()

{

    if (event.button != 1)

    {

        return;

    }

    draging = false;

 

    if (event.clientX >= aim.style.pixelLeft && event.clientX <= (aim.style.pixelLeft + aim.offsetWidth) &&

        event.clientY >= aim.style.pixelTop && event.clientY <= (aim.style.pixelTop + aim.offsetHeight))

    {

        //拖拽层位于目标中,自动定位到目标位置

        sourceLayer.style.pixelLeft = aim.style.pixelLeft;

        sourceLayer.style.pixelTop = aim.style.pixelTop;

         cloneLayer.className = "docked";

         /*

         **  这里完成之后可以用xml保存当前位置.

         **  下次用户进入的时候

         **  就初始化源拖拽层为xml当中的数据了    

         */

    }

    else

    {

    //拖拽位于目标层外,将拖拽源位置复原

     thisX = cloneLayer.style.pixelLeft;

     thisY = cloneLayer.style.pixelTop;

     offSetX = Math.abs(thisX - orgnX);

     offSetY = Math.abs(thisY - orgnY);

     time = 500;//设置动画时间

     stepX = Math.floor((offSetX/time)*20);

     stepY = Math.floor((offSetY/time)*20);

     if(stepX == 0)

         stepX = 2;

     if(stepY == 0)

         stepY = 2;

        

    //开始返回动画

     moveStart();

    }   

}

 

 

function moveStart()

{

     back = setInterval("MoveLayer();",15);

}

 

//设置返回的动画效果

function MoveLayer()

{

    //位于目标左上

     if(cloneLayer.style.pixelLeft <= orgnX && cloneLayer.style.pixelTop <= orgnY)

     {

         cloneLayer.style.pixelLeft += stepX;

         cloneLayer.style.pixelTop += stepY;

         //如果位移超过目标则设置速度为pix.并向反方向回移.此处实现了弹簧效果.下同

         if(cloneLayer.style.pixelLeft > orgnX)

         {

              stepX = 1;

         }

         if(cloneLayer.style.pixelTop > orgnY)

         {

              stepY = 1;

         }

         //在X或Y轴上坐标相同则不发生位移

         if(cloneLayer.style.pixelLeft == orgnX)

         {

              stepX = 0;

         }

         if(cloneLayer.style.pixelTop == orgnY)

         {

              stepY = 0;

         }

         if(cloneLayer.style.pixelLeft == orgnX && cloneLayer.style.pixelTop == orgnY)

         {

              EndMove();

         }

     }

    

     //位于目标左下

     else if(cloneLayer.style.pixelLeft <= orgnX && cloneLayer.style.pixelTop >= orgnY)

     {

         cloneLayer.style.pixelLeft += stepX;

         cloneLayer.style.pixelTop -= stepY;

         if(cloneLayer.style.pixelLeft > orgnX)

         {

              stepX = 1;

         }

         if(cloneLayer.style.pixelTop < orgnY)

         {

              stepY = 1;

         }

         if(cloneLayer.style.pixelLeft == orgnX)

         {

              stepX = 0;

         }

         if(cloneLayer.style.pixelTop == orgnY)

         {

              stepY = 0;

         }

         if(cloneLayer.style.pixelLeft == orgnX && cloneLayer.style.pixelTop == orgnY)

         {

              EndMove();

         }

     }

    

     //位于目标右上

     else if(cloneLayer.style.pixelLeft >= orgnX && cloneLayer.style.pixelTop <= orgnY)

     {

         cloneLayer.style.pixelLeft -= stepX;

         cloneLayer.style.pixelTop += stepY;

         if(cloneLayer.style.pixelLeft < orgnX)

         {

              stepX = 1;

         }

         if(cloneLayer.style.pixelTop > orgnY)

         {

              stepY = 1;

         }

         if(cloneLayer.style.pixelLeft == orgnX)

         {

              stepX = 0;

         }

         if(cloneLayer.style.pixelTop == orgnY)

         {

              stepY = 0;

         }

         if(cloneLayer.style.pixelLeft == orgnX && cloneLayer.style.pixelTop == orgnY)

         {

              EndMove();

         }

     }

    

     //位于目标右上

     else if(cloneLayer.style.pixelLeft >= orgnX && cloneLayer.style.pixelTop >= orgnY)

     {

         cloneLayer.style.pixelLeft -= stepX;

         cloneLayer.style.pixelTop -= stepY;

         if(cloneLayer.style.pixelLeft < orgnX)

         {

              stepX = 1;

         }

         if(cloneLayer.style.pixelTop < orgnY)

         {

              stepY = 1;

         }

         if(cloneLayer.style.pixelLeft == orgnX)

         {

              stepX = 0;

         }

         if(cloneLayer.style.pixelTop == orgnY)

         {

              stepY = 0;

         }

         if(cloneLayer.style.pixelLeft == orgnX && cloneLayer.style.pixelTop == orgnY)

         {

              EndMove();

         }

     }

    

     //到达目标

     else

     {

         EndMove();

     }

}

 

//停止返回动画

function EndMove()

{

         sourceLayer.style.pixelLeft = orgnX;

         sourceLayer.style.pixelTop = orgnY;

         cloneLayer.style.pixelLeft = orgnX;

         cloneLayer.style.pixelTop = orgnY;

         cloneLayer.className = "docked";

         clearInterval(back);

}

 

//主拖拽函数

function startDraging(inAim,inSource,inClone,initAimX,initAimY,initOrgnX,initOrgnY)

{

    getLayer(inAim,inSource,inClone)

    initDrag(initAimX,initAimY,initOrgnX,initOrgnY);

    sourceLayer.onmousedown = BeforeDrag;

    document.onmousemove = OnDrag; //这里如果用cloneLayer,在拖拽中会选中cloneLayer里面内容,进而出现一些bug...

    cloneLayer.onmouseup = EndDrag;   

}

 

//调用

startDraging("aim","sourceLayer","cloneLayer",300,200,20,20);

//-->

</script>

</body>

</html>

需要注意的是:

[1] [2] 下一页 




上一篇:google的分析(analytics)js代码分析以及重写

下一篇:获得connect string简单方法

javascript实现类似google和msn space的拖拽 相关文章:
·javascript 常用代码大全
·在PB中如何实现数据模糊查询
·Ajax实现分页查询
·PB动态报表格式自由定义的实现
·做GOOGLE月入一万RMB提示交流
·PB程序中在普通激光打印机上实现条码打印
·Java语言实现支持视频点播的WEB服务器
·javascript 动态添加表格行
·Delphi中利用钩子实现QQ聊天窗口的修改
·Google的秘密 招聘条件跟微软一样
javascript实现类似google和msn space的拖拽 相关软件:
·Google Earth 动态卫星地图 汉化版 带我们进入间谍时代 能看见你家院子
·卫星定位地图GoogleEarth 看全球每个平方角超级高清定位
·TCP-IP详解卷2:实现
·卫星定位地图GoogleEarth 看全球每个平方角
·Google Earth 动态卫星地图 汉化版 能看见你家院子的车 电信做种
·google卫星地图,可以看见你家晒的衣服,免费送给大家
·Google SketchUp V6.0.277 汉化版
·Google PicasaV2.7 Build 37.23 正式版
·Google谷歌拼音输入法V1.0.23.40
·GOOGLE电影下载器 V2.116

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:viphot