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

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
Jina AI
Jina AI
宝玉的分享
宝玉的分享
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks
博客园 - 【当耐特】
小众软件
小众软件
博客园 - Franky
S
SegmentFault 最新的问题
WordPress大学
WordPress大学
雷峰网
雷峰网
The Cloudflare Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
量子位
Last Week in AI
Last Week in AI
博客园_首页
月光博客
月光博客
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
Webroot Blog
Webroot Blog
Stack Overflow Blog
Stack Overflow Blog
腾讯CDC
云风的 BLOG
云风的 BLOG
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
W
WeLiveSecurity
Recent Commits to openclaw:main
Recent Commits to openclaw:main
D
Docker
The Last Watchdog
The Last Watchdog
有赞技术团队
有赞技术团队
Hacker News - Newest:
Hacker News - Newest: "LLM"
D
DataBreaches.Net
S
Security @ Cisco Blogs
Blog — PlanetScale
Blog — PlanetScale
GbyAI
GbyAI
TaoSecurity Blog
TaoSecurity Blog
S
Security Affairs
Y
Y Combinator Blog
O
OpenAI News
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Forbes - Security
Forbes - Security
P
Palo Alto Networks Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
K
Kaspersky official blog
Cloudbric
Cloudbric

博客园 - 孤城浪子

[转].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>