最近学校要求刷网课,用的超星学习通,就是那个鼠标一旦移出播放器就自动暂停播放的平台,我用着用着把那个事件监听器移除了(通过 chrome 的审查元素里面的 event listener 直接 remove ) 但是当我想做成一句代码方便再 console 输入的时候(document.getelementsxxxxxx.removeEventListener),点开 properties 没办法找到 onmouseout 绑定的事件 本来是打算直接用 removeEventListener 移除事件然后打包分发代码给同学,毕竟不是所有人都用 chrome,像 edge 的那个就连一键移除这个选项都没有
1
dondom 2019-05-17 19:25:27 +08:00
function removeEventListener(node) {
var parent = node.parentElement var copy = node.cloneNode() copy.innerHTML = node.innerHTML parent.replaceChild(copy, node) } 随便写了一个 性能没要求的话应该能用 |
2
Juszoe 2019-05-17 22:46:31 +08:00
正巧我几个月前也写了个超星的脚本,也考虑过这个问题,发现没有一个很好的解决方案,最后是监听播放器停止事件,然后进行播放。
代码你可以看一下 https://juszoe.github.io/erya/ |
3
Juszoe 2019-05-17 22:52:32 +08:00
另外由于那个事件是匿名函数,removeEventListener 是删不掉它的,希望有大佬能告知如何删除匿名函数
|
4
1010543618 2019-05-17 23:15:14 +08:00
|
5
1010543618 2019-05-17 23:15:30 +08:00
貌似没有更好的方法了
|
6
duan602728596 2019-05-17 23:17:18 +08:00 via iPhone
你可以写个定时器,轮询 video.paused 状态,当 video 暂停时,通过 video.play()播放
|
7
1010543618 2019-05-17 23:18:56 +08:00 1
https://developers.google.com/web/tools/chrome-devtools/console/utilities?utm_source=dcc&utm_medium=redirect&utm_campaign=2016q3#geteventlisteners
``` getEventListeners(document); ``` 貌似主流浏览器的调试工具都支持这个方法了 |
8
fsdgfd 2019-05-18 02:32:59 +08:00 via Android
试试 pointer-events:none
|
9
bankroft 2019-05-18 09:07:57 +08:00 via Android
|
10
McContax OP @Juszoe 是一个不错的思路,其实监听暂停这个比较现实,我尝试去用 remove event listener,由于是匿名函数每次执行都要事先展开 html 的播放器页面,让浏览器计算得出 mouseout 的监听事件,然后才能移除
@1010543618 chrome 那个试了一下,很艰难的成功了,不过还有一个难点,在运行 get eventlistener 之前必须手动展开一次 html 相关的播放器的代码,不然的话 get eventlistener 就没办法 get 到 mouseout,关于这一点 dalao 有没有什么好的解决方法吗 ![avatar]( ) |
11
McContax OP @1010543618 刚刚又挖了一下,我发现我的 event listener 是勾了 ancestors all,也就是说实际上 mouseout 并不是绑定在我认为的那个元素那里,我把 ancestors all 关掉,找出了他绑定元素的位置了,这样子直接用 remove 就 OK 了,谢谢
|