惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tailwind CSS Blog
F
Fortinet All Blogs
Microsoft Azure Blog
Microsoft Azure Blog
Jina AI
Jina AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
N
Netflix TechBlog - Medium
B
Blog RSS Feed
Blog — PlanetScale
Blog — PlanetScale
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
The Blog of Author Tim Ferriss
D
Docker
博客园 - 聂微东
博客园 - 【当耐特】
博客园 - 三生石上(FineUI控件)
L
LangChain Blog
量子位
宝玉的分享
宝玉的分享
博客园 - 司徒正美
The Cloudflare Blog
G
Google Developers Blog
Microsoft Security Blog
Microsoft Security Blog
腾讯CDC

博客园 - 孤城浪子

[转].Net 中的许可证机制 [原]一步一步自己制作弹出框 [转]获取窗口 高 、宽 的JS代码 PHP连接mysql数据库 - 孤城浪子 - 博客园 PHP文件上传 动态调用Web Service - 孤城浪子 - 博客园 [转]ASP.NET 2.0 下加密解密算法的封装 [转]fckeidtor配置 [转]加解密技术 - 孤城浪子 - 博客园 [转]服务器推技术 [JavaScript]简单跟随鼠标移动的文字 排序算法 [仿照CloudGamer]写的颜色渐变 Asp.Net用SmtpClient发送邮件 项目中遇到的Vss和Sql问题 [JavaScript]飘浮文字 C#文件打散合并 C#调用Excel的宏 [网上整理]C#合并Excel
[JavaScript]拖动对象 - 孤城浪子 - 博客园
孤城浪子 · 2009-06-29 · via 博客园 - 孤城浪子

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">
function New(aClass,aParams)
{
    function new_()
    {
        aClass.Create.apply(this,aParams);
    }
    new_.prototype=aClass;
    return new new_();
}
function Bind(obj,fun)
{
    return function()
    {
        return fun.call(obj);
    }
}
function BindAsListener(obj,fun)
{
 return function(event)
 {
  return fun.apply(obj, [event?event:window.event]);
 }
}
function AddEventHander(obj,oEventType,fun)
{
    if(obj.addEventListener)
    {
        obj.addEventListener(oEventType,fun,false);
    }
    else if(obj.attachEvent)
    {
        obj.attachEvent("on"+oEventType,fun);
    }
    else
    {
        obj["on"+oEventType]=fun;
    }
}
function RemoveEventHandler(obj, oEventType, fun)
{
    if (obj.removeEventListener)
    {
        obj.removeEventListener(oEventType, fun, false);
    }
    else if (obj.detachEvent)
    {
        obj.detachEvent("on" + oEventType, fun);
    }
    else
    {
        obj["on" + oEventType] = null;
    }
}
var Drag=
{
    Create:function(op,id)
    {
        this._drag=document.createElement("div");
        this._drag.id=id;
        this._x=this._y=0;//鼠标第一次down时的距离拖动对象的边距
        this.SetCss(op); 
        //添加拖动对象到页面
        document.body.appendChild(this._drag);
        this._fM=BindAsListener(this,this.Move);
        this._fS=Bind(this,this.Stop);
        //绑定到document的mousedown事件
        AddEventHander(document,"mousedown",BindAsListener(this,this.Start));
    },
    SetCss:function(options)
    {
        for(var key in options)
        {
            this._drag.style[key]=options[key];
        }
    },
    Start:function(ev)
    {       
        this._x=ev.clientX-this._drag.offsetLeft;
        this._y=ev.clientY-this._drag.offsetTop;
        AddEventHander(document,"mousemove",this._fM);
        AddEventHander(document,"mouseup",this._fS);
    },
    Move:function(ev)
    {
        this._drag.style.left=ev.clientX-this._x;
        this._drag.style.top=ev.clientY-this._y;
    },
    Stop:function()
    {
        RemoveEventHandler(document,"mousemove",this._fM);
        RemoveEventHandler(document,"mouseup",this._fS);
    }
}

</script>
</head>
<body>
<script type="text/javascript">
var op={width:"40px",height:"40px",border:"1px solid #ccc",background:"#E5F5FF",position:"absolute"};
var d=New(Drag,[op,"MyDrag"]);
</script>
</body>
</html>