`
ham
  • 浏览: 81540 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

将事件扩展向窗口以外

阅读更多
通常,当我们制造移动效果时.当你正在拖动一个对象时,鼠标脱离了当前窗口.并且在窗口之外放开了鼠标,再回到窗口当中.会发现,当鼠标移动时.之前拖动的那个对象还在继续移动.
这是因为被移动的元素不知道你在窗口外面已经放下了鼠标.所以依然处于可以移动状态的缘故.

那有好的解决办法吗?答案是肯定的:用setCapture()方法.

setCapture():将某个方法的事件绑定到整个文档.
它的用法在DHTML手册里面都有记载:
object.setCapture();
相应的,object.releaseCapture()用于将object所绑定的事件释放掉
其中,object为要将事件绑定到文档的对象.
例如:

<div id="test" style="position:absolute;width:200;height:300;background-color:red">
我要被移动
</div>

<script>
//**//ham//**//

function $(id){return document.getElementById(id);}
window.onload=function(){
    $(test).onmousedown=MouseDown;
    $(test).onmousemove=MouseMove;
    $(test).onmouseup=MouseUp;
}
var canMove=false;

function MouseDown(){
    //在鼠标按下时,将$(test)的事件绑定到整个文档
     $(test).setCapture()
    canMove=true;
    ...
    ...
}

function MouseMove(){
     if(canMove){
        //移动层
         ...
        ...
    }
}

function MouseUp(){
     //鼠标放开之后,将$(test)所绑定的事件释放.
     $(test).releaseCapture();
     canMove=true;
     ...
     ...
}
</script>



这样,当你在id为test的层上按下鼠标时,test层的事件就被绑定到整个文档对象上去了.这时,你会发现你所托动的层可以不受限制的到处拖动.
你可以尝试着把窗口缩小成屏幕的一半,当你按下鼠标,开始拖动这个层时.当你的鼠标一起移动到窗口以外的区域,层依然在你的控制下在移动着.
---------------------------------------------------------------------
(原创)
分享到:
评论
1 楼 doltter 2008-06-04  
好文章。。。

相关推荐

    在VMware下扩展Ubuntu存储容量的方法

    对 sda1 的存储容量进行扩展,删除除 sda1 以外的磁盘分区,将 sda1 扩展到最大。然后关闭系统,然后在 boot 启动,将启动方式的顺序设置成那样重启 ubuntu 系统。 显示扩展后的磁盘容量 在 ubuntu 下显示扩展后的...

    vim窗口分割

    - 如果要关闭除当前窗口以外的所有窗口,可以使用`:only`命令。 #### 四、窗口大小调整 - `:split`命令可接受行数前缀,来设置新窗口的高度,如`:3split`会创建一个高度为3行的窗口。 - 对于已打开的窗口,可以...

    C#自定义控件--Popup窗口提醒完整源码_89.rar

    Popup窗口通常被用作一种轻量级的通知方式,它可以快速地向用户显示信息,并在一段时间后自动消失,或者在用户与之交互后关闭。在C#中,Popup控件是Windows Forms或WPF框架的一部分,但这个自定义控件可能添加了额外...

    Developer-Profile:当配置文件中的所有窗口都关闭时删除浏览器数据的 Google Chrome 扩展程序

    这是一个谷歌浏览器扩展,当配置文件中的所有窗口都关闭时,它会删除浏览器数据。 它最适合用于专门为 Web 开发创建的配置文件。 它是为响应创建的:在隐身模式下忽略/重置 devtools 设置 执照 您可以使用此扩展...

    VISUAL C++MFC扩展编程实例

    了解用 M F C来做什么涉及到对4个基本概念的理解:Windows API...除了这些概念以外,本部分将讨论一下工具栏和状态栏。最后我们将讨论一下 M F C如何同非Wi n d o w s构件进行通信,如串行口和I n t e r n e t站点。

    MyFll Microsoft Visual FoxPro设计的扩展库

    SendMessage 向指写窗口发送指定消息 PostMessage 将消息投递到指定句柄的消息队列 ShowWindow 显示指定窗口 ShowWindowAsync 显示指定窗口 SetWindowLong 设置窗口的扩展样式 SetLayeredWindowAttributes...

    PT80-NEAT开发指南v1.1

    窗口事件 ............................................................................................................................................... 24 窗口类概览 ....................................

    VISUAL C++MFC扩展编程实例.rar

    无论读者是否已经读过本系列的书籍,或者已经具备了多年的编程...除了这些概念以外,本部分还 将讨论一下工具栏和状态栏。最后我们将讨论一下M F C如何同非Wi n d o w s构件进行通信,如 串行口和I n t e r n e t站点。

    仿彗星小助手拖拽窗口源码-易语言

    4. **坐标转换**:可能需要将屏幕坐标转换为窗口坐标,以便正确计算窗口的新位置。 5. **边界检查**:确保窗口移动后不会超出屏幕范围。 学习这个源码,开发者不仅可以掌握易语言中窗口和鼠标事件的处理,还能深入...

    VC++常用功能实例

    21、如何单击除了窗口标题栏以外的区域使窗口移动 43 22、如何改变视窗的背景颜色 43 23、如何改变窗口标题 44 24、如何防止主框窗口在其说明中显示活动的文档名 44 25、如何获取有关窗口正在处理的当前消息的信息 ...

    VC++常用的共用函数100多页

    21、如何单击除了窗口标题栏以外的区域使窗口移动 43 22、如何改变视窗的背景颜色 43 23、如何改变窗口标题 44 24、如何防止主框窗口在其说明中显示活动的文档名 44 25、如何获取有关窗口正在处理的当前消息的信息 ...

    图片预览器

    函数调用的第一个参数是产生信号的widget组件(即按钮等窗口构件),而name则是希望捕获的信号或事件的名称,callback_func则是事件发生后所调用的回调函数名称,而第四个参数func_data则是传递给回调函数的参数。...

    Mute Tab-crx插件

    此扩展可以切换当前活动选项卡,当前窗口中的选项卡,其他窗口中的选项卡以及活动窗口以外的所有选项卡的静音。 您可以从工具栏弹出窗口访问扩展程序的控件,也可以通过定义自定义键盘快捷键来访问扩展程序的控件。 ...

    WTL 三态位图按钮

    WS_CLIPCHILDREN风格是一个窗口风格标志,当设置此风格时,窗口将剪切其子窗口区域以外的所有绘图操作,以防止子窗口绘制到父窗口的其他部分。在三态位图按钮的实现中,如果这个风格被错误地应用或者处理不当,可能...

    窗体禁止移动1111

    // 将返回值设为HTCAPTION以外的值,阻止拖动 m.Result = (IntPtr)1; // HTCLIENT 或者 HTBODY 都可以 } else { base.WndProc(ref m); } } } ``` 在这个示例中,当WM_NCHITTEST消息到达时,我们改变了它的...

    用vb做的小计算器,我不知道还要怎么详细

    可以考虑将每个运算类型(如加法、减法等)封装为单独的函数,这样代码更易读,也方便后期维护和扩展。 7. **用户交互**:为了提升用户体验,我们可以考虑添加一些额外的功能,比如清除输入、查看历史记录、复制...

    EXTJS4.2浮动侧边框

    当鼠标远离屏幕边缘时(如距离边缘250像素以外),触发窗口隐藏。 3. **解决窗体大小改变时的高度自动调整问题**: - 为了确保窗口的高度始终与主窗口保持一致,我们还需要监听窗口的`resize`事件,并在窗口尺寸...

    Excel VBA实用技巧大全 附书源码

    01022将Excel移动到屏幕以外 01023隐藏Excel 01024改变Excel的标题文字 01025删除Excel的标题文字 01026将Excel设置为全屏显示 01027在状态栏中显示信息 01028显示、隐藏状态栏 01029显示、隐藏编辑栏 01030显示、...

Global site tag (gtag.js) - Google Analytics