在以前,如果要禁止移动端设备的触摸屏上,手指缩小放大的功能,都会想到使用viewport 来处理。...passived 实际上就是告诉浏览器,某个事件监听是否会使用 preventDefault 来阻止默认行为,便于浏览器优化性能。特别是浏览器优化页面滚动时的性能,可以让页面滚动更顺滑。...在Chrome中,wheel / touch 等事件中的 passive 会默认设置为true,但Safari不支持。...由于目标被视为被动,因此无法在被动事件侦听器中阻止默认行为。 可能的发生情景:移动端使用touch事件后,垂直平移时的报错。...方法一:使用 touch-action 样式来禁止垂直平移的默认行为 touch-action: pan-y; 方法二:监听 touch事件 中,明确设置 passive 为 false,声明不是被动的
当属性passive的值为true的时候,代表监该听器内部不会调用preventDefault函数来阻止默认滑动行为,Chrome浏览器称这类型的监听器为被动(passive)监听器。...是被动监听mousewheel事件,即handler内部不会调用事件的preventDefault函数。...只要输入事件要在内核线程执行逻辑,那么遇到内核线程在忙,必然无法立即得到响应。...浏览器只有等内核线程执行到事件监听器对应的JavaScript代码时,才能知道内部是否会调用preventDefault函数来阻止事件的默认行为,所以浏览器本身是没有办法对这种场景进行优化的。...对应这种场景(如上图中的MouseWheel Handlers:YES-Passive:No分支),合成线程无法知道对应的监听器内部是否会调用preventDefault函数来阻止默认行为,此时合成线程只能将该输入事件派发给内核线程处理
当属性passive的值为true的时候,代表该监听器内部不会调用preventDefault函数来阻止默认滑动行为,Chrome浏览器称这类型的监听器为被动(passive)监听器。...是被动监听mousewheel事件,即handler内部不会调用事件的preventDefault函数。...只要输入事件要在内核线程执行逻辑,那么遇到内核线程在忙,必然无法立即得到响应。...浏览器只有等内核线程执行到事件监听器对应的JavaScript代码时,才能知道内部是否会调用preventDefault函数来阻止事件的默认行为,所以浏览器本身是没有办法对这种场景进行优化的。...对应这种场景(如上图中的MouseWheel Handlers:YES-Passive:No分支),合成线程无法知道对应的监听器内部是否会调用preventDefault函数来阻止默认行为,此时合成线程只能将该输入事件派发给内核线程处理
翻译一下:chrome 监听touch类事件报错:无法被动侦听事件preventDefault,是新版本chrome 浏览器报错。...说明:说一下这个 preventDefault()是个什么鬼,这个是取消默认事件的,如果这个函数起作用的,比如默认的表单提交,a链接的点击跳转,就不好用了。...现在:google就决定默认取消了对这个事件的检查,默认时间就取消了。直接执行滑动操作。这样就更加的顺滑了。 但是浏览器的控制台就会进行错误提醒了。...具体情况: 从 chrome56 开始,在 window、document 和 body 上注册的 touchstart 和 touchmove 事件处理函数,会默认为是 passive: true。...: body { margin: 0; height: 2000px; background: linear-gradient(to bottom, red, green); } // 在
为了解决这问题,Chrome (通过允许往addEventListener()中传入{passive: true})让touch系列事件的事件监听器变为“被动”(译者注:其实就是touch之后,不再是执行完事件函数后再滚动...然而,问题是大多数情况下是不会在事件处理函数中调用preventDefault(),但浏览器需要等到事件处理函数执行完之后才能确定这点。因而开发者可以定义“被动的事件监听器”去解决这问题。...当你注册 touch 系列事件的监听器时,加入{passive: true}对象作为第三个参数后,浏览器就认为你不会在事件处理函数中调用 preventDefault(),它就可以安全地让页面滚动,不再等待事件处理函数执行完...我们看到,其中大约80%表现上都是“被动(译者注:也就是并未调用 preventDefault() )”的,但(开发者)却基本没将该事件的监听器注册为“被动”。...: 等同于: 现在,在事件处理函数中,调用preventDefault()将会被忽略。
这个示例的运行效果是,当单击内部的链接a时,只执行一个doThis函数;而如何将stop修饰符去了,doThat也会派发。 2,多个修饰符串连 事件修饰符可以串连并用,例如: once 这个最简单,监听事件执行函数,执行完了就把事件监听移除了。在vue的事件机制中,vm....浏览器只有等内核线程执行到事件函数的代码时,才能知道函数内部是否会调用了preventDefault函数来阻止事件的默认行为,所以浏览器本身是没有办法对这种场景进行优化的。...在这种场景下,如果涉及到用户交互的事件无法快速产生,会导致页面无法及时渲染而让用户感到页面卡顿。
依次弹出:最里层---->中间层---->最外层,但最后没有跳转链接 由此可以看出 event.stopPropagation() 事件处理过程中,阻止了事件冒泡,但不会阻击默认行为(它就执行了超链接的跳转...) return false 事件处理过程中,阻止了事件冒泡,也阻止了默认行为(比如刚才它就没有执行超链接的跳转) event.preventDefault() 事件处理过程中,不阻击事件冒泡,但阻击默认行为...(它只执行所有弹框,却没有执行超链接跳转) Vue解决事件冒泡 Vue.js为v-on提供了 事件修饰符,我们只需要添加click.stop即可防止事件冒泡 ... ...
image.png 事件处理程序 我们也称之为事件侦听器(listener),事件就是用户或浏览器自身执行的某种动作。...image.png 在事件处理程序内部,this始终等同于currentTarget,而target是事件的实际目标。...这种方法无法给一个事件添加多个事件处理程序,一个事件只能绑定一次,后面的程序会覆盖前面的程序。...//删除事件 /*参数分别是,事件处理属性名称,处理函数,是否在捕获时执行事件处理函数, 默认是false,即在冒泡阶段执行 */ 应用举例 var btn = document.getElementById...()添加的匿名函数将无法移除。
See https://www.chromestatus.com/features/5093566007214080 造成原因: 由于浏览器必须要在执行事件处理函数之后,才能知道有没有掉用过 preventDefault...所以为了让页面滚动的效果如丝般顺滑,从 chrome56 开始,在 window、document 和 body 上注册的 touchstart 和 touchmove 事件处理函数,会默认为是 passive...浏览器忽略 preventDefault() 就可以第一时间滚动了。...导致的问题: 浏览器在触发touchstart,touchmove事件的时候,e.preventDefault()会被浏览器忽略掉,并不会阻止默认行为。...解决方案: 1,注册处理函数时,用如下方式,明确声明为不是被动的 window.addEventListener('touchmove', fn, { passive: false }) 2、应用 CSS
我们经常会碰到类似设置半透明遮罩的需求,通常是绝对定位一个div盖在元素上方,这时遮罩层的鼠标事件优先级会更高,使得打上遮罩的元素无法进行正常交互行为,此时只需给遮罩设置 pointer-events:...touchstart 或 touchmove 事件中用 event.preventDefault() 阻止系统默认事件,不就可以阻止手势操作吗?...监听事件都是先进行了"触摸"才能执行回调,如果需要阻止默认事件,那么就必须在触摸开始前就检查是否需要阻止,滑动响应的优先级反而降低了,Google为了保证滑动流畅性就默认取消了这一机制。...所以从 chrome56 开始,如果你在全局 touch 事件中不声明这是"非被动"操作,那么chrome浏览器会默认不执行并报错。...,它相当于先声明了元素的可用触摸事件,这样浏览器就不会报错了,preventDefault() 也不会影响到触摸的事件,这两者可以结合来使用。
停止冒泡 .prevent - 调用 event.preventDefault()。 阻止默认行为 .capture - 添加事件侦听器时使用 capture 模式。....self - 只当事件是从侦听器绑定的元素本身触发时才触发回调。 .{keyCode | keyAlias} - 只当事件是从特定键触发时才触发回调。....passive - (2.3.0) 以 { passive: true } 模式添加侦听器 这些修饰符部分是可以串联起来使用的。 作用: 绑定事件监听器。事件类型由参数指定。...$on其实就是实现全局事件总线的原理。 二、自定义事件 简单图示: 我们给在App组件中,通过v-on或者@给A组件绑定一个自定义事件,它的触发时机是等到A组件在内部调用this....--绑定自定义事件 send-message:是我们自定义事件名, 后面的sendMessage自定义事件被触发执行的回调函数 --> <Demo1 v-on:send-message="sendMessage
(2)v-if 是惰性的(lazy):如果在初始渲染时条件为 false,不会执行任何操作 - 在条件第一次变为 true 时,才开始渲染条件块。...(4)通常来说,v-if 在切换时有更高的性能开销,而 v-show 在初始渲染时有更高的性能开销。...8.2 事件修饰符 (1).stop - 调用 event.stopPropagation()。 (2).prevent - 调用 event.preventDefault()。...(3).capture - 添加事件侦听器时使用 capture 模式。 (4).self - 只当事件是从侦听器绑定的元素本身触发时才触发回调。 (5)....十、v-model 在表单控件或者组件上创建双向绑定,监听用户的输入事件以更新数据。
所有现代浏览器支持preventDefault方法,这个方法会阻止浏览器处理事件的默认行为。一个常见示例就是链接,使用链接执行UI操作是一种常见的做法。...使用事件委托能减少监听器数量,在元素的容器上绑定事件意味着只需要一个监听器。这种方法的缺点是,父容器的侦听器可能需要检查事件来选择正确的操作,而元素本身不会是一个监听器。...父容器层次的监听器能处理多种不同的事件操作,这是一种简单的方法来管理相关的事件操作,这些事件通常需要执行相关功能或需要共享数据。...如果父容器是监听器,然后要执行独立的内部操作而并不需要添加或者移除本身的监听器。...元素操作在单页应用中是极其常见的,为某部分添加一个按钮这样简单的事情也会为应用程序创建一个潜在的性能块,没有合适的事件委托,就必须手动为每一个按钮添加监听,如果每个侦听器不清理干净,它可能会导致内存泄漏
Making touch scrolling fast by default 简而言之: 由于浏览器必须要在执行事件处理函数之后,才能知道有没有掉用过 preventDefault() ,这就导致了浏览器不能及时响应滚动...所以为了让页面滚动的效果如丝般顺滑,从 chrome56 开始,在 window、document 和 body 上注册的 touchstart 和 touchmove 事件处理函数,会默认为是 passive...: body { margin: 0; height: 2000px; background: linear-gradient(to bottom, red, green); } // 在...两个方案: 1、注册处理函数时,用如下方式,明确声明为不是被动的 window.addEventListener('touchmove', func, { passive: false }) 2、应用...CSS 属性 touch-action: none; 这样任何触摸事件都不会产生默认行为,但是 touch 事件照样触发。
一、事件简述 1、事件概念 在Web中, 事件在浏览器窗口中被触发,执行事先绑定的事件处理器(也就是事件触发时会运行的代码块),对事件做出响应。...如果事件不传播,我们无法确定我们点击的对象是什么? 2、事件流三种模型 2.1事件冒泡模型 事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的元素。...三、事件处理程序(事件侦听器(listener)) 1、概念 事件处理程序:事件触发后,执行响应对应事件的程序。...3.4 removeEventListener解绑事件 通过addEventListener添加的事件处理程序只能通过removeEventListener移除,移除时参数与添加的时候相同 添加的匿名函数无法移除...input[name=username]').value==='sjz'){ this.submit() } }) 结果 2.4target和currenttarget 在事件处理程序内部
导绪在我们进行target和this的使用中如何区分this的指向问题呢?怎么才能阻止冒泡事件?...在js中常用的鼠标事件和键盘事件,在实开发中会遇到很多的地方需要用到这些比如mousemove,keydown等,本篇就来了解一下这些吧!...', function (e) { e.preventDefault(); }) // 利用return也能进行一个阻止默认事件 特点return后面的代码不执行...= function (e) { return false; } 注意:return false;只能用在传统的方法上,并且它后面的代码不执行...:给父节点添加侦听器,利用事件冒泡影响每一个子节点 var ul = document.querySelector('ul'); ul.addEventListener('
v-show适合频繁切换 vue常用修饰符 v-on 指令常用修饰符 .stop 调用event.stopPropagation() 禁止事件冒泡 .prevent 调用envent.preventDefault...() 阻止事件默认行为 .capture 添加事件侦听器使用capture模式 .self 当事件是从侦听器绑定的元素本身触发时才触发的回调 ....特性名转换成camelCase .sync 语法糖,会拓展成一个更新父组件绑定值的v-on侦听器 v-model 指令常用修饰符 .lazy 取代input监听change事件 .number 输入字符串转为数字...并不是直接更新DOM,而是开启一个队列,并缓冲在同一个事件循环中发送的所有数据改变,在缓存中会去除重复数据,从而避免不必要的计算和DOM操作,然后,在下一个事件循环tick中,Vue刷新队列并执行实际(... vue中子组件调用父组件的方法 通过v-on监听和$emit触发来实现 在父组件中通过v-on监听当前实例上的自定义事件 在子组件中通过$emit触发当前实例上的自定义事件 // 父组件 <template
因为选项卡内部的内容由渲染器进程处理,所以浏览器进程会把事件类型(如touchstart)及其坐标发送到渲染器进程。 渲染器进程通过查找事件目标并运行附加的事件侦听器来适当地处理事件。 ?...图4:在覆盖整个页面的非快速可滚动区域进行输入 为了缓解这种情况,你可以在事件侦听器中传递passive:true选项。 这向浏览器提示你仍然希望在主线程中监听事件,同时合成器也可以继续并合成新帧。...在鼠标事件中使用 passive:true 选项意味着可以平滑滚动页面,但是在你想要用preventDefault 来限制滚动方向时,垂直滚动可能已经开始了。...下一步 在本系列中,我们介绍了Web浏览器的内部工作原理。...例如,如果要确保应用永远不会阻止解析,或者可以在同步脚本策略上运行应用。 启用 sync-script: 'none' 时,将禁止解析器阻止 JavaScript 执行。
.prevent:调用event.preventDefault()。 .capture:添加事件侦听器时使用 capture 模式。 .self:只当事件是从侦听器绑定的元素本身触发时才触发回调。 ....{keyCode | keyAlias}:只当事件是从特定键触发时才触发回调。 .native:监听组件根元素的原生事件。 .once:只触发一次回调。....passive:(2.3.0) 以{ passive: true }模式添加侦听器 说明: 绑定事件监听器。 用在普通元素上时,只能监听原生 DOM 事件。...在绑定 class 或 style 特性时,支持其它类型的值,如数组或对象。 在绑定 prop 时,prop 必须在子组件中声明。可以用修饰符指定不同的绑定类型。...只在可信内容上使用v-html,永不用在用户提交的内容上。 在单文件组件里,scoped的样式不会应用在v-html内部,因为那部分 HTML 没有被 Vue 的模板编译器处理。
我们可以使用 v-on 指令来监听 DOM 事件,从而执行 JavaScript 代码。 v-on 指令可以缩写为 @ 符号。...语法格式: v-on:click="methodName" 或 @click="methodName" 事件修饰符 Vue.js 为 v-on 提供了事件修饰符来处理 DOM 事件细节,如:event.preventDefault...-- 添加事件侦听器时使用事件捕获模式 --> ... ... 按键修饰符 Vue 允许为 v-on 在监听键盘事件时添加按键修饰符:
领取专属 10元无门槛券
手把手带您无忧上云