TA的每日心情 | 慵懒 2018-8-25 12:29 |
---|
签到天数: 91 天 [LV.6]常住居民II
|
本帖最后由 garypang 于 2018-5-20 19:10 编辑 ' J, V1 {/ m/ Z+ |
. v- L, B$ X* V5 \2 A$ ?
以下只针对PC下的ANKI
* R3 Q3 m. V4 @3 J
. [3 A1 l o& Q不知大家有发现没,ANKI中的一些JS效果会不断累加,浏览到第几张卡片JS就会在当前卡片上执行多少次,导致除第一张卡片外的其他所有卡片上的JS都不能正常显示, 有个插件能解决这个问题https://ankiweb.net/shared/info/1280253613
$ r' U4 A0 i$ G3 {但只针对anki2的, anki2.1还是没办法,8 [9 h! T' L& U% Q7 s( j9 h
不用插件行不行呢,) O) R- L5 K. H9 j
首先得弄清楚为啥会出现这个问题,; M6 s7 g2 n) G
ANKI对所有 document , html ,body 元素对象里相关的JS代码都会累加重复执行,比如7 V2 S m: n# H4 X1 j+ d0 R# i* ?
- document.body.click(...)2 f& ~1 J" ?# [& n8 E
- $(window).keyup(...)
6 ^0 b# @& L: ?% n - $(window).scroll(...)+ h7 j3 ^/ c4 x7 R0 R
- $("html,body").animate(...)
8 a0 t" I M3 p: W0 M. L& a% L - ...
* s& [+ V9 j1 S1 i6 |9 N: D
复制代码 }" p1 s. E$ S8 ]& b2 ]+ x
举个栗子5 K; ?1 U' V/ b3 z5 J
- $("body").click(function(){
+ g! w. ]3 X- e0 C - alert("test");9 L0 i4 {+ g+ _9 D3 x9 _. P I
- })
复制代码
5 R+ _& |7 r- v2 c o浏览第一张卡片的时候,鼠标点击body会弹出一次test弹窗,浏览到第二张卡片,点击一次body则会连续弹出两次test弹窗,到第三张卡片,点击一次则会连续弹出三次test弹窗,以此类推,点击事件会不断叠加, 问题不出在click事件本身,而是因为是body对象下的click,如果改为其他比如$(".anki").click(...);则完全不会出现上述问题
* \* V! b/ h; p& K+ j+ p% B" J$ s/ i$ G0 Y. l
解决办法其实很简单,把document , html ,body 元素对象里的相关代码做个限制,只允许执行一次即可.
2 P" P: v' A% j2 p( I7 i8 N2 I+ A7 Q$ ^7 D# h
比如上述代码可以这样写:- x: \8 B3 n% F
' `# v2 H3 G4 V8 \6 m6 V; L& C* @& t$ w0 @1 _: L5 d
另外一个问题,ANKI怎么引入外部JS文件? 直接<script src="..."></script>是无效的,会被anki过滤掉.. a S. S/ ?5 Z8 H! g
# p3 `- N' @* X* g& C9 w* m
可以这样写4 \, k! X* L* F) M
- var script = document.createElement('script');
" O3 G) g: ~0 H - script.type = "text/javascript";3 I9 @" J7 W4 r0 l* ]" q
- script.src = "_jquery.js"; % x- ~; `- y. w* @- O! W
- document.getElementById("ak_wrap").appendChild(script);
复制代码 7 q4 a* v B: B, S1 s& I
这里特别注意,一不小心就会踩了上面那个坑,代码第四行你肯定会想当然用document.body.appendChild(script)吧,前面刚说了document.body对象里的JS会被重复执行,这样写后果就是到第二张卡片的时候就会出现两个<script src="_jquery.js"></script>, _jquery.js被调用了两次,正确的写法是append到除body, html外的其他元素里." J8 Y% o, T- k- I A
* o$ v$ u, `3 R) ?( V7 f以上, 希望对你有帮助 |
评分
-
2
查看全部评分
-
|