发表于: 2017-01-07 01:09:00

1 1444


今天完成的事情:做小课堂ppt,查event delegate的资料,看红宝书关于事件的内容;看精通angular的angular之禅、angularjs速成;看css3关于线性变化;


明天计划的事情:继续看angular自定义指令和服务;看与精通angular的与后端交互、显示与格式化数据;


遇到的问题:闭包之前遇到过没研究过,想看看,记录一下,先弄angular……


收获:

JavaScript 与HTML之间的交互是通过事件实现的。事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间。可以使用侦听器(或处理程序)来预订事件,以便事件发生时执行相应的代码。这种在传统软件工程中被称为观察员模式的模型,支持页面的行为与页面的外观之间的松散耦合。事件冒泡,即事件开始时由最具体的元素接受,然后逐级向上传播到较为不具体的节点。事件捕获,即事件开始时由不具体的元素接受,然后逐级向下传播到较为具体的节点。事件处理程序:事件就是用户或浏览器自身执行的某种动作。诸如click、load和mouseover,都是事件的 名字。而响应某个事件的函数就叫做事件处理程序。事件处理程序的名字以"on"开头。
Event对象提供了一个属性叫target,可以返回事件的目标节点,我们成为事件源,也就是说,target就可以表示为当前的事件操作的dom,但是不是真正操作dom,当然,这个是有兼容性的,标准浏览器用ev.target,IE浏览器用event.srcElement,此时只是获取了当前节点的位置,并不知道是什么节点名称,这里我们用nodeName来获取具体是什么标签名,这个返回的是一个大写的标签名。
那什么样的事件可以用事件委托,什么样的事件不可以用呢?
适合用事件委托的事件:click,mousedown,mouseup,keydown,keyup,keypress。
值得注意的是,mouseover和mouseout虽然也有事件冒泡,但是处理它们的时候需要特别的注意,因为需要经常计算它们的位置,处理起来不太容易。
不适合的就有很多了,举个例子,mousemove,每次都要计算它的位置,非常不好把控,在不如说focus,blur之类的,本身就没用冒泡的特性,自然就不能用事件委托了。

angularJS允许跨域作用域层级,传播带有信息的命名事件(name events)。事件可以从任何作用域开始分发($emit),然后向上分发或向下广播($broadcast)。angular的核心服务与指令通过这个事件来发送新型号,通知应用状态的变化。每个作用域实例都有$on方法,用于注册作用域事件的处理器。调用处理器函数时,被分发的对象会作为第一个参数传入,后续参数会依据事件负载的信息和事件类型而定。与DOM事件一样,对象有preventDefault()和stopPropagation()方法。会阻止事件通过作用域层级冒泡(bubbling up),即它仅在事件向上分发($emit)时有效。


返回列表 返回列表
评论

    分享到