以百度的登录窗口为例,学习鼠标拖拽效果如何实现,拖拽范围限定以及登录窗口自动居中。学会如何制作弹出窗口特效,了解把元素设置为可拖拽的原理。
知识点:
1.掌握对可拖拽对话框的实现原理
2.了解元素如何触发脚本方法以及如何编写侦听事件
3. 学会设置元素在页面中居中和全屏
注意区别:
1.screenX:鼠标位置相对于用户屏幕水平偏移量,而screenY也就是垂直方向的,此时的参照点也就是原点是屏幕的左上角。
2.clientX:跟screenX相比就是将参照点改成了浏览器内容区域的左上角,该参照点会随之滚动条的移动而移动。
3.pageX:参照点也是浏览器内容区域的左上角,但它不会随着滚动条而变动。
鼠标事件:
鼠标事件1 - 在标题栏上按下(要计算鼠标相对拖拽元素的左上角的坐标,并且标记元素为可拖动)
鼠标事件2 - 鼠标移动时(要检测元素是否标记为可移动,如果是,则更新元素的位置到当前鼠标的位置【ps:要减去第一步中获得的偏移】)
鼠标事件3 - 鼠标松开的时候(标记元素为不可拖动即可)
效果:
完整代码及注释:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <style type="text/css"> *{ margin: 0; padding: 0; list-style: none; } .main{ width: 600px; height: 320px; margin: 0 auto; margin-top: 80px; margin-left: 400px; } .img{ text-align: center; } .item1{ margin-left: 115px; width: 600px; } .item1 li{ float: left; width: 50px; } .text{ width: 600px; margin-left: 80px; margin-top: 5px; } .text .txt{ width: 450px; height: 30px; } .text .btn{ width: 70px; height: 30px; cursor: pointer; } .item2{ width: 600px; margin-left: 200px; margin-top: 30px; } .item2 li{ float: left; margin-left: 10px; } .link{ text-align: right; line-height: 30px; padding-right: 40px; } .logmove{ width: 380px; height: auto; background: #fff; } .Box{ width: 380px; height: auto; position: absolute; left: 100px; top: 100px; border: 1px solid #d5d5d5; z-index: 9000; background: #fff; display: none; } .title{ height: 48px; line-height: 48px; color: #535353; background: #f5f5f5; padding: 0px 20px; font-size: 16px; border-bottom: 1px solid #efefef; cursor: move; user-select: none; } .title .closebtn{ display: block; width: 16px; height: 16px; position: absolute; top: 15px; right: 20px; background: url("img/close_def.png") no-repeat; cursor: pointer; } .title .closebtn:hover{ background: url("img/close_hov.png"); } .content{ padding: 15px 20px; } .Input{ padding-top: 15px; } .txt1,.txt2,.Input{ height: 40px; line-height: 40px; text-align: right; } .username,.password{ width: 100%; height: 40px; margin: 0px; padding: 0px; border: 1px solid #c1c1c1; text-indent: 25px; outline: none; } .username{ background: url("img/input_username.png") no-repeat 2px; } .password{ background: url("img/input_password.png") no-repeat 2px; } .submit{ width: 100%; height: 50px; background: #3b7ae3; border: none; font-size: 16px; color: #fff; outline: none; text-decoration: none; display: block; text-align: center; line-height: 50px; } .submit:hover{ background: #3f81b0; } .mask{ width: 100%; height: 100%; background: #000; position: absolute; top: 0; left: 0; z-index: 8000; opacity: 0.4; filter: Alpha(opacity=40); display: none; } </style> <script type="text/javascript"> window.onload=function(){ //获取元素对象 function g(id){ return document.getElementById(id); } //自动居中 - 登录浮层 ( el = Element) function autoCenter(el){ var bodyW = document.documentElement.clientWidth;//网页可视区域 var bodyH = document.documentElement.clientHeight; var elW = el.offsetWidth;//登录框的宽度 var elH = el.offsetHeight; el.style.left = (bodyW - elW) / 2 + 'px';//实现居中 el.style.top = (bodyH - elH) / 2 + 'px'; } //自动全屏 - 遮罩 function fillToBody(el){ el.style.width = document.documentElement.clientWidth + 'px'; el.style.height = document.documentElement.clientHeight + 'px'; } var mouseOffsetX = 0;//鼠标偏移量 var mouseOffsetY = 0; var isDraging = false; //鼠标事件1 - 在标题栏上按下(要计算鼠标相对拖拽元素的左上角的坐标,并且标记元素为可拖动) g('title').addEventListener('mousedown',function(e){ var e = e||window.event; mouseOffsetX = e.pageX - g('Box').offsetLeft; mouseOffsetY = e.pageY - g('Box').offsetTop; isDraging = true; }) //鼠标事件2 - 鼠标移动时(要检测元素是否标记为可移动,如果是,则更新元素的位置到当前鼠标的位置【ps:要减去第一步中获得的偏移】) document.onmousemove = function(e){ var e = e||window.event; var mouseX = e.pageX;//鼠标当前位置 var mouseY = e.pageY; var moveX = 0;//浮层元素的新位置 var moveY = 0; if(isDraging === true){ moveX = mouseX - mouseOffsetX; moveY = mouseY - mouseOffsetY; //拖拽范围限定 moveX > 0 并且 moveX < (页面最大宽度 - 浮层的宽度) // moveY > 0 并且 moveY < (页面最大高度 - 浮层的高度) var pageWidth = document.documentElement.clientWidth;//页面宽度 var pageHeight = document.documentElement.clientHeight; var BoxWidth = g('Box').offsetWidth; var BoxHeight = g('Box').offsetHeight; var maxX = pageWidth - BoxWidth; var maxY = pageHeight - BoxHeight; moveX = Math.max(0,moveX);//实际上就是获得moveX的所有正数值,也就是规定范围的下限值 moveX = Math.min(maxX,moveX);//实际上就是规定了moveX的上限值 moveY = Math.max(0,moveY); moveY = Math.min(maxY,moveY); /* moveX =Math.min(maxX, Math.max(0,moveX)); moveY =Math.min(maxY, Math.max(0,moveY)); */ g('Box').style.left = moveX + 'px'; g('Box').style.top = moveY + 'px'; } } //鼠标事件3 - 鼠标松开的时候(标记元素为不可拖动即可) document.onmouseup = function(){ isDraging = false; } function showBox(){ g('Box').style.display = 'block'; g('mask').style.display = 'block'; autoCenter(g('Box')); fillToBody(g('mask')); } function hideBox(){ g('Box').style.display = 'none'; g('mask').style.display = 'none'; } g('log').onclick = function(){ showBox(); } g('close').onclick = function(){ hideBox(); } /*窗口改变大小时的处理 1.保持登录浮层居中 2.保持遮罩的全屏,使之不会出现滚动条 */ window.onresize = function(){ autoCenter(g('Box')); fillToBody(g('mask')); } } </script> <body> <div class="link"><a href="#" id="log">登录</a></div> <div class="main"> <div class="img"><img src="/UploadFiles/2021-04-02/baidu.png">以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】