`
izuoyan
  • 浏览: 8945884 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

用JS脚本做一个可拖动的对话框

阅读更多

JS脚本做一个可拖动的对话框

左直拳

一、 可拖动

关键是能跟踪鼠标坐标的变化,从而不断修正对话框的坐标。

假设待移动的对话框为objMove,则有

pX = event.x - objMove.style.pixelLeft;

pY = event.y - objMove.style.pixelTop;

其中pixelLeftpixelTop是对话框左边缘、顶边缘与document左边缘、顶边缘的距离,event.xevent.y是鼠标按下(未松开)的坐标值。

因此可得到鼠标抓紧点与对话框边缘的坐标差pXpY。只要在鼠标移动过程中,保持这一坐标差恒定不变,月亮走我也走,鼠标送阿框到村口,即可实现对话框的拖动:

objMove.style.left = event.x - pX;

objMove.style.top = event.y - pY;

这只是原理,还需要一些函数进行支撑。

设置三个函数:

MDown()//鼠标按下时触发,得到pX,pY的值,放在对话框的onmousedown调用

MMove()//鼠标移动时触发,拖动,document.onmousemove

MUp()//鼠标松开时触发,释放,document.onmouseup,当然放在对话框的onmouseup调用也是可以的

注意这个对话框要用绝对定位。

二、 对话框内的文本框等可正常编辑

如果对话框内有文本框、下拉框等可供用户进行编辑的控件,如果不进行特别处理,则光标在这些控件内拖动同样会引起对话框的移动,这跟我们平时使用的习惯不符,给框内的编辑带来麻烦。

怎么办呢?

如果知道鼠标抓紧时落在哪种类型的控件上就好了。

嘿,这位老板,你好运了!可以用event.srcElement来获取这个控件

var hitpoint = event.srcElement;

if( hitpoint.tagName == "INPUT"

|| hitpoint.tagName == "TEXTAREA"

|| hitpoint.tagName == "SELECT" )

{

objMove = null;//不鸟它

return;

}

三、 半透明

这个对话框还要有点透明,拖动时下面的元素若隐若现,这样才让人够兴奋,浮想联翩。

主要是CSS里实现。style="FILTER:alpha(opacity=90);position:absolute;left:60%;……

不过这好象在IE系的浏览器里才有用,对firefox这些则没效果。

附录:drag.js

var objMove = null;

var pX = 0;

var pY = 0;

document.onmouseup = MUp;

document.onmousemove = MMove;

function MDown(objMoveId)

{

var hitpoint = event.srcElement;

if( hitpoint.tagName == "INPUT"

|| hitpoint.tagName == "TEXTAREA"

|| hitpoint.tagName == "SELECT" )

{

objMove = null;

return;

}

objMove = document.getElementById(objMoveId);

if( objMove == null )

{

return;

}

objMove.style.cursor = "move";

//objMove.setCapture();

pX = event.x - objMove.style.pixelLeft;

pY = event.y - objMove.style.pixelTop;

}

function MMove()

{

if(objMove != null)

{

objMove.style.left = event.x - pX;

objMove.style.top = event.y - pY;

}

}

function MUp()

{

if(objMove != null)

{

//objMove.releaseCapture();

objMove.style.cursor = "default";

objMove = null;

}

}

分享到:
评论

相关推荐

    jQuery的弹出警告对话框美化插件

    3:在IE7中,可以使你避免使用JavaScript 的prompt()函数带来的页面重新加载。 4:这些方法都模拟了Windows的模式对话框。在你改变改变浏览器窗口大小时候,它能够自适应用户 窗口的调整。 5:如果你引入...

    fc-window-directive:Angular 模块,包含一个指令。 该指令允许您在页面上使任何绝对定位的 div 可拖动和调整大小。 它看起来就像可移动(可拖动)和可调整大小的对话框窗口

    Angular 模块,包含一个指令。 该指令允许您在页面上使任何绝对定位的 div 可拖动和调整大小。 它看起来就像可移动(可拖动)和可调整大小的对话框窗口。 它没有 JQuery Draggable。 #安装 bower install fc-...

    javascript完全学习手册1 源码

    javascript完全自学手册 目 录 第1篇 JavaScript基础篇 第1章 JavaScript简介 1 1.1 JavaScript概述 1 1.1.1 什么是JavaScript 1 1.1.2 JavaScript的基本特点 2 1.1.3 常用的Web开发语言 3 1.2 JavaScript的应用 4 ...

    程序天下:JavaScript实例自学手册

    6.5 从一个下拉列表往另一个下拉列表添加内容 6.6 改变列表项的上下顺序 6.7 给下拉框数据分组 6.8 获取列表框的选择 6.9 类IE下拉框 6.10 下拉框式邮件发送 6.11 获取多选框的选择项 6.12 手动调整的列表框 6.13 ...

    《程序天下:JavaScript实例自学手册》光盘源码

    6.5 从一个下拉列表往另一个下拉列表添加内容 6.6 改变列表项的上下顺序 6.7 给下拉框数据分组 6.8 获取列表框的选择 6.9 类IE下拉框 6.10 下拉框式邮件发送 6.11 获取多选框的选择项 6.12 手动调整的列表框 6.13 ...

    artDialog_Demo

    27、新增加一个'data'的接口,它保存了你对话框每次创建的消息对象 (操作iframe消息将更加方便,如提交iframe表单。稍后添加更多的例子..) 28、对于简单的消息可以使用简写: artDialog('hello world') 29、让IE6...

    js实现百度登录框鼠标拖拽效果

    1.掌握对可拖拽对话框的实现原理 2.了解元素如何触发脚本方法以及如何编写侦听事件 3. 学会设置元素在页面中居中和全屏 注意区别: 1.screenX:鼠标位置相对于用户屏幕水平偏移量,而screenY也就是垂直方向的,此时...

    javascript完全学习手册2 源码

    1.3 在web页面中使用JavaScript 1.3.1 HTML的基本结构 1.3.2 在HTML中嵌入JavaScript 1.3.3 链接JavaScript文件 1.4 编写JavaScript的工具 1.4.1 使用纯文本编辑器 1.4.2 使用专业化脚本编辑工具 ...

    jQuery弹出对话框,弹出提示代码

    摘要:脚本资源,jQuery,弹出对话框 一款基于jQuery的小插件,实现弹出对话框及弹出提示的功能,代码调用简单,效果也挺好,演示截图如上示。弹出的dialog是可以关闭的,还可以拖动边角改变弹出框的大小,还有重叠影...

    用Chrome开发者工具做JavaScript性能分析

    我们来看一个简单的“颜色排序器”应用,这个应用展示了一个由各种颜色构成的网格,你可以拖拽这些颜色进行混合。每一个点都是一个div标签加上一些让它看起来是圆的的CSS。生成这些颜色是需要技巧的,所以我借助

    JavaScript网页特效范例宝典源码

    实例075 只有一个复选框时控制复选框的全选或反选 119 2.5 密码域 120 实例076 让您的密码域更安全 120 实例077 不提交表单自动检测密码域是否相同 121 2.6 表单应用 122 实例078 通过JavaScript控制表单的提交与...

    EXT教程EXT用大量的实例演示Ext实例

    TabPanel使用autoLoad加载的页面中的js脚本没有执行 B. 修改日志 C. 后记 C.1. 2007年12月5日,迷茫阶段 C.1.1. 仇恨 C.1.2. 反省 C.2. 关于ext与dwr整合部分的讨论 C.3. 怎么看文档附件里的范例 D. 贡献者...

    50个实用的JavaScript工具

    包含了许多的界面操作功能,如我们常用的表格排序,拖拽,TAB选项卡,滚动条,相册浏览,日历控件,对话框等JS插件…Google推出的一个开发Ajax应用的框架,它支持用Java开发和调试Ajax应用。我们可以既充分利用Java...

    EXT2.0中文教程

    TabPanel使用autoLoad加载的页面中的js脚本没有执行 B. 修改日志 C. 后记 C.1. 2007年12月5日,迷茫阶段 C.1.1. 仇恨 C.1.2. 反省 C.2. 关于ext与dwr整合部分的讨论 C.3. 怎么看文档附件里的范例 D. 贡献者列表 ...

    javascript网页特效实例大全

    9.5 打开一个四面变大的窗口 237 9.6 定时打开新的窗口 238 9.7 转动出现的窗口 239 9.8 自动弹出的窗口 241 9.9 自动消失的广告窗口 242 9.10 窗口的震动效果 243 9.11 同时打开10个窗口 244 9.12 检测系统...

    ExtAspNet_v2.3.2_dll

    -如何自定义Javascript脚本和C#处理函数来响应键盘事件。 -为Tree增加AutoLeafIdentification属性。 -增加示例(tree_auto_leaf_identification.aspx)(feedback:wdrabbit)。 +2009-11-17 v2.1.4 -修正...

    flex3的cookbook书籍完整版dpf(包含目录)

    3.18 节使用可关闭Tabs 创建一个TabNavigator 3.19 节创建和控制Alert 3.20 节根据呼出组件设置对话框的尺寸和位置 3.21 节管理多个弹出对话框 3.22 节在容器中滚动到某个指定的子组件 3.23 节使用IdeferredInstance...

Global site tag (gtag.js) - Google Analytics