Javascript从零开始学习第四天(1)

Javascript从零开始学习第一天 

Javascript从零开始学习第二天(1) 

Javascript从零开始学习第二天(2) 

Javascript从零开始学习第三天(1) 

Javascript从零开始学习第三天(2) 

Javascript从零开始学习第四天(1) 

Javascript从零开始学习第四天(2) 



一、事件基础

1、事件对象

194421_Ar8A_374.png

event 事件对象,用来获取事件的详细信息:鼠标位置 键盘按键

点击事件 整个页面绑定点击事件 整个页面的事件应该加给document

194433_KQW3_374.png

例子:获得鼠标位置:clientX clientY 

这里使用来得到可视区域的鼠标位置

IE和chrome没问题 FF不支持event

194442_N9ZY_374.png

使用兼容方式

var oEvent=ev||event;

194451_oyhW_374.png

这样所有浏览器都可以使用事件对象了。

2、事件流

事件流动的过程。

事件冒泡,从最底层点击触发对象开始,一层一层晚上事件冒泡。

194512_8efR_374.gif

点击最里层的红色div 触发了红色事件,然后会一级一级的传给绿色、会的div

最后传给body和document

仿select下拉框原理:

点击按钮,显示隐藏的菜单区域,点击空白处隐藏。

这里给document加点击事件后,点击按钮也会触发,所以需要阻止事件的冒泡。

使用event.cancelBubble=true;将冒泡禁止。

194538_oNMk_374.png

3、鼠标坐标位置 鼠标事件

194554_bEGY_374.png

单纯使用clientX和ClientY是可视化区域的位置,一旦页面出现滚动条

滚动位置就会影响这个程序。

解决方案:

使用clentY+scrollTop可以得到整个页面鼠标的实际位置。

194619_bpMf_374.png

194638_XrFd_374.png

4、键盘事件

194658_mdNq_374.png

使用keyCode检测按键

按下:onkeydown 弹起:onkeyup

print screen没有keyCode

例子:鼠标控制div移动

原理:判断keycode后执行移动(div的位置变化)

194715_edlM_374.png

二、事件中级

1、默认行为 比如右键出菜单 这是浏览器默认行为

194732_qSvR_374.png

如何屏蔽浏览器默认行为?

document.οncοntextmenu=function(){

    return false;//只要return false;就能屏蔽默认菜单事件

};

194755_BxIV_374.png

效果

194813_Iudp_374.png

2、拖拽事件

194831_inWH_374.png

拖拽原理:鼠标与div左上角距离不变 

需要绑定三个事件

mousedown mousemove mouseup

194849_ULaY_374.png

194923_nuAu_374.png

使用return false阻止默认事件可以阻止火狐浏览器的bug 拖拽空div 可以拖出两个。!!

上面的程序还有bug 没有限制边缘范围 防止拖拽出浏览器回不来。

只需要判断现在的位置和浏览器边缘判断就行了。

194942_fSNG_374.png

194958_uv2k_374.png

清除事件,不留垃圾。

三、事件高级

1、事件绑定

195018_P9sa_374.png

浏览器兼容性处理

195035_fhbv_374.png

可以简单封装简化一下使用方式,处理兼容性。

195052_JA8d_374.png

2、高级拖拽

1、限制不能拖出窗口

主要是判断边缘处理,如果越界自动回到边界处。

195119_UqwI_374.png

2、限制不能拖出父级组件

195144_A8F9_374.png

195200_dMN8_374.png

上面程序的bug是在IE7、8上存在选择文字时bug

195216_xH3h_374.png

使用只有IE支持的 事件捕获功能

obj.setCapture(); 作用在于把网页中所有的事件都

集中在一个地方应用。

195232_pkFW_374.png

195248_MQtq_374.png

这样写可以分别判断ie和其他浏览器,分别处理

3、磁性吸附

195326_xqzS_374.png

4、带框的拖拽

动态创建一个框(div 虚线);

大小为要拖动的div的大小 

线框跟着鼠标运动

鼠标up的时候 目标div移动到虚框位置

删除虚框

195346_fxGM_374.png

虚线会占用一个像素 所以宽度应该减去2


转载于:https://my.oschina.net/imhoodoo/blog/361369

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值