页面内元素跟随鼠标移动和右键菜单组件功能
来源:互联网 发布:淘宝买身份证 编辑:程序博客网 时间:2024/04/30 13:58
这是腾讯一面给我的面试题,现在想想其实也蛮简单的,主要是考察鼠标事件。我当时没有完成的比较好。面试完后仔细又重新实现了下。
鼠标对正方形元素拖拽和放下,主要涉及的鼠标事件包括:mouseover,mousemove,mousedown.。
事件流程如下
(1)当鼠标首次点击触发mousedown
(2)移动时触发mousemove,正方形才跟着移动
(3)鼠标点击完成后释放时触发mouseup,正方形不再跟着移动。
这里首先要有mousedown事件发生,正方形才跟着移动,所以可以设置一个状态status,当mousedown事件发生后status变为1,mouseup事件发生时,status = 0,在mousemove的回调函数中判断,只有当status=1时,正方形才跟着移动。
除了考察鼠标事件外,还考察了鼠标指针相对于文档的位置。
scrollTop = document.documentElement.scrollTop || document.body.scrollTop,标准盒模型中是document.documentElement也即为html,IE盒模型中是document.body.scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;x = event.pageX || event.clientX + scrollleft, Firefox中鼠标当前的文档坐标是 pageX,而其他浏览器需要使用鼠标距离当前视口的距离加上文档滚动偏移。y = event.pageY || event.clientY + scrollTop;
至于邮件菜单功能,我当时没想到鼠标有专门的对应的事件 即 contextmenu.。我当时是判断点击鼠标时事件对象的button属性,其实这个属性存在兼容性问题,有的浏览器中是event.which。
完整的代码实现如下:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Square move with mouse</title><script type="text/javascript" src="jquery.js"></script><style type="text/css">*{padding: 0;margin:0;}html,body{position:relative;width: 100%;height: 100%;}.square{position: absolute; left: 0;top:10;width: 100px;height: 100px;background:red;}.menu{display:none;position:absolute;left:0; top: 120px;width: 100px;height: 100px;background: yellow;}</style></head><body><div class="square"></div><div class="menu"></div><script type="text/javascript">(function() {var status = 0,scrollTop = document.documentElement.scrollTop || document.body.scrollTop,scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;$('body').on('mousedown', function(e) {var event = e || window.event;status = 1;}).on('mousemove', function(e) {var event = e || window.event,x = event.pageX || event.clientX + scrollleft,y = event.pageY || event.clientY + scrollTop;if(status === 1) {$('.square').css({'left':x, 'top':y});}}).on('mouseup', function(e) {var event = e || window.event,x = event.pageX || event.clientX + scrollleft,y = event.pageY || event.clientY + scrollTop;if(status === 1) {$('.square').css({'left':x, 'top':y});}status = 0;}).on('contextmenu', function(e) {var event = e || window.event,x = event.pageX || event.clientX + scrollleft,y = event.pageY || event.clientY + scrollTop;$('.menu').css({'left':x,'top':y,'display':'block'});})})()</script></body></html>
0 0
- 页面内元素跟随鼠标移动和右键菜单组件功能
- jquery元素跟随鼠标移动
- 【ZedGraph】右键菜单和鼠标滚轴的移动缩放等功能的启用和禁用
- pageX、pageY及父元素的页面坐标使提示框跟随鼠标移动
- 给右键菜单增加“复制到”和“移动到”功能
- 注册表和鼠标右键菜单
- 鼠标右键菜单中增加复制到 和移动到 命令
- 层跟随鼠标移动
- 人物跟随鼠标移动
- 跟随鼠标移动div
- 图片跟随鼠标移动
- 跟随鼠标移动
- 禁止鼠标右键菜单和F5刷新
- 禁用页面及页面所有frame内的右键菜单
- 在Win7右键菜单中增加"移动到"和"复制到"的功能,提高工作效率
- javascript实现加载页面全屏以及禁用鼠标右键和选取功能
- 用javascript 实现网页鼠标右键弹出菜单功能
- Java程序员必看--扩展鼠标右键菜单功能
- js中继承的封装
- github更新自己Fork的代码
- ArrayAdapter创建ListView
- 蓝牙实战(一)
- python+ffmpeg批量去视频开头
- 页面内元素跟随鼠标移动和右键菜单组件功能
- android之popupwindow点击空白消失
- 单一入口机制
- jQuery中自定义事件
- userdebug的版本 adb root
- 链表的回文结构
- js中回调函数
- sorted的学习记录
- Node.js包的管理