鼠标拖拽移动子窗体的JS实现_javascript技巧
1.子窗体
在设计网站的时候,我们需要设计一些模态的子窗体,比如
这一步很容易实现,只需要div css就ok了,请看代码:
.modal-background
{
background-color: #999999;
bottom: 0;
left: 0;
opacity: 0.3;
position: fixed;
right: 0;
top: 0;
z-index: 1100;
}
.modal-window
{
background-color: #FFFFFF;
border: 1px solid #6B94AD;
box-shadow: 5px 5px 5px #6B94AD;
font-family: 'Microsoft YaHei';
font-size: 12px;
height: 120px;
left: 50%;
margin-left: -160px;
margin-top: -160px;
opacity: 1;
position: fixed;
top: 50%;
width: 320px;
z-index: 1110;
}
.modal-window .head
{
height: 25px;
color: #fff;
font-weight: 600;
background-image: -moz-linear-gradient(top, #4A8CC5, #2963A5); /* Firefox */
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #4A8CC5), color-stop(1, #2963A5)); /* Saf4 , Chrome */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#4A8CC5', endColorstr='#2963A5', GradientType='0'); /* IE*/
}
.modal-window .head center
{
padding-top: 2px;
}
加上上述html和css就可以很容易实现上述模态窗体的效果。其中left: 50%;top: 50%; margin-left: -160px; margin-top: -160px;是为了实现这个模态窗体的居中效果。
当然,模态窗体的大小在样式类.modal-window中是固定写好的了,这并不是说不可修改模态窗体的大小,比如我写如代码:
在第二行代码中追加了.list-window这个样式类来覆盖.modal-window类中的大小和位置,但同时保证模态窗体居中显示
.list-window
{
width:600px;
height:400px;
margin-left:-300px;
margin-top:-200px;
}
如图
可以看得出来,这一步的实现是非常简单的,掌握几个关键行的css属性就"完虐"这个模态子窗体,各类其它的模态子窗体可以举一反三咯。
2.当鼠标点住子窗体的头部时,如何实现子窗体的拖拽移动呢?当引入jQ后,我们只需要很少的脚本就搞定这个小功能。不信我们看
var left, top, $this;
$(document).delegate('.modal-window .head', 'mousedown', function (e) {
left = e.clientX, top = e.clientY, $this = $(this).css('cursor', 'move');
this.setCapture ? (
this.setCapture(),
this.onmousemove = function (ev) { mouseMove(ev || event); },
this.onmouseup = mouseUp
) : $(document).bind("mousemove", mouseMove).bind("mouseup", mouseUp);
});
function mouseMove(e) {
var target = $this.parents('.modal-window');
var l = Math.max((e.clientX - left Number(target.css('margin-left').replace(/px$/, '')) || 0), -target.position().left);
var t = Math.max((e.clientY - top Number(target.css('margin-top').replace(/px$/, '')) || 0), -target.position().top);
l = Math.min(l, $(window).width() - target.width() - target.position().left);
t = Math.min(t, $(window).height() - target.height() - target.position().top);
left = e.clientX;
top = e.clientY;
target.css({ 'margin-left': l, 'margin-top': t });
}
function mouseUp(e) {
var el = $this.css('cursor', 'default').get(0);
el.releaseCapture ?
(
el.releaseCapture(),
el.onmousemove = el.onmouseup = null
) : $(document).unbind("mousemove", mouseMove).unbind("mouseup", mouseUp);
}
这段代码非常简短,能否在各种浏览器中很流畅的运行。
其实它的实现原理非常简单,大致分为三步:
①当鼠标在模态窗体头部点下(mousedown)时,立即给document绑定mousemove和mouseup事件
②当鼠标没有弹起时(没有mouseup)时,若鼠标在窗体内移动时,激活mouseMove函数,通过计算鼠标移动的距离来及时整个窗体的位置移动。
③当鼠标弹起(mouseup)时,调用mouseUp事件,将document上绑定的mousemove事件和mouseup事件解除绑定。
整个过程的原理就是:当鼠标mousedown时,鼠标的移动事件转移到document上来,通过鼠标在document上的移动事件来对整个窗体进行处理。
另外,在mouseMove中有个小技巧,就是全局的left,top变量记录上一次鼠标停止时的位置,然后下一次移动时鼠标的位置与left,top变量进行对比来确定鼠标移动了多少距离,来对整个模态子窗体做出相应的位置移动即可。
经过这一段代码的分析,发现鼠标移动窗体乃至document上的任何元素都是相当easy的
比如,如果想要通过拖拽来改变窗体的大小,一样我们只需要在mouseMove事件处理函数中调整窗体的大小就ok了,是不是又发现自己有多学会了一招,又精进了一小步呢?
有人会问setCapture和releaseCapture分别都是干什么的呢?其实这是为了兼容IE,仅有IE才有这俩函数,在此鄙视IE。setCapture可以让当前元素捕获鼠标的所有事件,如果不使用它们,可能不兼容IE浏览器哦。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

本文将介绍如何在Win11系统中关闭鼠标移动任务栏图标时显示的缩略图功能。这一功能在默认情况下是开启的,当用户将鼠标指针悬停在任务栏上的应用程序图标上时,会显示该应用程序的当前窗口缩略图。然而,有些用户可能觉得这个功能不太实用或者会干扰到他们的使用体验,因此想要关闭它。任务栏缩略图可能很有趣,但它们也可能分散注意力或烦人。考虑到您将鼠标悬停在该区域的频率,您可能无意中关闭了重要窗口几次。另一个缺点是它使用更多的系统资源,因此,如果您一直在寻找一种提高资源效率的方法,我们将向您展示如何禁用它。不过

appdata文件夹可以移到d盘吗随着电脑使用的日益普及,用户的个人数据和应用程序也越来越多地存储在计算机上。在Windows操作系统中,有一个特定的文件夹,名为appdata文件夹,它用于存储用户的应用程序数据。许多用户想知道是否可以将这个文件夹移到D盘或其他磁盘上,以便进行数据管理和安全性的考虑。在本文中,我们将讨论这个问题并提供一些解决方案。首先,让我

本站7月12日消息,雷蛇今日宣布推出雷蛇|宝可梦耿鬼款无线鼠标、鼠标垫。其单品定价分别为1299元和299元,包含两款产品的套装价则为1549元。这并非雷蛇首次推出耿鬼联名的外设产品,2023年雷蛇就推出过耿鬼款的八岐大蛇V2游戏鼠标。此次推出两款新品整体均采用与鬼斯、鬼斯通、耿鬼家族外观类似的深紫色底色,印有这三只宝可梦和精灵球的线条轮廓,中间则为耿鬼这一经典幽灵属性宝可梦的彩色大图。本站发现,雷蛇|宝可梦耿鬼款无线鼠标基于此前发布的毒蝰V3专业版打造。其整体重量为55g,搭载雷蛇第二代FOC

这篇文章探讨了在MicrosoftWord中鼠标无法选择或突出显示文本时可能出现的问题,以及如何解决这些问题。为什么我无法在MicrosoftWord中选择文本?在MSWord中无法选择文本可能受多种原因影响,如权限限制、文档受保护、鼠标驱动问题或文件损坏。以下将提供解决这些问题的方法。修复MicrosoftWord无法使用鼠标选择或突出显示文本如果MicrosoftWord无法使用鼠标选择或突出显示文本,请遵循下面提到的解决方案:确保您的鼠标左键正在工作检查您是否有资格更改该文件更新鼠标的驱动

本站3月31日消息,惠普近日在京东上架了一款Professor1三模蓝牙鼠标,可选黑白奶茶色,首发价99元,需要支付10元定金。据介绍,这款鼠标重量106克,采用人体工程学设计,尺寸为127.02x79.59x51.15mm,可选七档4000DPI,搭载蓝影RAW3220传感器,使用650毫安时电池,号称一次充电续航可以使用2个月。本站附鼠标参数信息如下:

本站8月12日消息,VGN于8月6日推出了联名《艾尔登法环》键鼠系列产品,包含键盘、鼠标和鼠标垫,采用菈妮/褪色者定制主题设计,目前系列产品已上架京东,售价99元起。本站附联名新品信息如下:VGN丨艾尔登法环S99PRO键盘该键盘采用纯铝合金外壳,辅以五层消音结构,使用GASKET板簧结构,拥有单键开槽PCB、原厂高度PBT材质键帽、铝合金个性化背板;支持三模连接和SMARTSPEEDX低延迟技术;接入VHUB,可一站式管理多款设备,首发549元。VGN丨艾尔登法环F1PROMAX无线鼠标该鼠标

很多用户不知道自己雷蛇驱动安装的文件去了哪里,这些驱动文件一般都是安装在了系统盘,也就是电脑的C盘,具体位置在programfiles下的RAZE文件夹。雷蛇鼠标驱动在哪个文件夹答:在系统C盘的programfiles下的RAZE文件夹。一般驱动都会安装在C盘,按照位置去找就可以了。雷蛇鼠标驱动安装方法介绍1、下载好官网的文件以后双击运行自己下载的EXE文件。2、等待软件加载。3、在这里可以选择你要安装的哪个驱动。4、选择好以后点击右下角的“安装”就可以了。

微软在最新的Windows11版本中将PhoneLink的名称更改为MobileDevice。这一变化使得用户可以通过提示来控制计算机访问移动设备的权限。本文将介绍如何在您的电脑上管理允许或拒绝移动设备访问的设置。该功能让您能够配置移动设备并与计算机连接,从而进行文本消息的发送和接收、移动应用程序的控制、联系人的查看、电话的拨打、图库的查看等操作。将手机连接到PC上是个好主意吗?将手机连接到WindowsPC是一个方便的选择,可以轻松地传输功能和媒体。这对那些需要在移动设备无法使用时使用电脑的人
