jQuery裡的silidetoggle方法不停重複動畫效果的解決辦法

weixin_30639719發表於2020-04-05

最近學到了bootstrap裡的過渡效果,在用silidetoggle方法的時候出現了一個有意思的現象,在滑鼠滑過速度過快或者次數過多或者其他不知名原因的情況下,收放效果一直重複,程式碼:

 1 <!DOCTYPE html>
 2 <html>
 3     <head lang="en">
 4         <meta name="viewport" content="width=device-width, initial-scale=1">
 5         <meta charset="UTF-8">
 6         <title></title>
 7         <link rel="stylesheet" href="../res/bootstrap.css">
 8         <script src="../res/jquery-2.2.3.min.js"></script>
 9         <script src="../res/bootstrap.min.js"></script>
10         <style>
11             li a span{
12                 margin-right: 15px;
13                 color: deepskyblue;
14             }
15         </style>
16     </head>
17     <body style="margin-top: 50px">
18         <div class="container">
19             <div class="btn-group">
20                 <button type="button" class="btn btn-success dropdown-toggle" data-toggle="dropdown">
21                     water
22                     <span class="caret"></span>
23                 </button>
24                 <ul class="dropdown-menu" role="menu">
25                     <li>
26                         <a href="#">
27                             <span class="glyphicon glyphicon-piggy-bank"></span>
28                             基本資訊
29                         </a>
30                     </li>
31                     <li>
32                         <a href="#">
33                             <span class="glyphicon glyphicon-book"></span>
34                             平面示圖
35                         </a>
36                     </li>
37                     <li>
38                         <a href="#">
39                             <span class="glyphicon glyphicon-alert"></span>
40                             執行監測
41                         </a>
42                     </li>
43                     <li>
44                         <a href="#">
45                             <span class="glyphicon glyphicon-adjust"></span>
46                             平衡分析
47                         </a>
48                     </li>
49                     <li>
50                         <a href="#">
51                             <span class="glyphicon glyphicon-apple"></span>
52                             資料查詢
53                         </a>
54                     </li>
55                     <li>
56                         <a href="#">
57                             <span class="glyphicon glyphicon-save"></span>
58                             CAD圖
59                         </a>
60                     </li>
61                 </ul>
62             </div>
63         </div>
64         <script>
65             $(".btn-group").hover(function() {
66                 $(this).children("ul").slideToggle();
67             });
68         </script>
69     </body>
70 </html>

經過一番查詢,看到了一個方法:stop()。

.stop 是jQuery中用於控制頁面動畫效果的方法。執行之後立刻結束當前頁面上的動畫效果。
stop在新版jQuery中新增了2個引數:
第一個引數的意思是是否清空動畫序列,也就是stop的是當前元素的動畫效果還是停止後面附帶的所有動畫效果,一般為false,跳過當前動畫效果,執行下一個動畫效果;
第二個引數是是否將當前動畫效果執行到最後,意思就是停止當前動畫的時候動畫效果剛剛執行了一般,這個時候想要的是動畫執行之後的效果,那麼這個引數就為true。否則動畫效果就會停在stop執行的時候。

然後我把這個方法加到silidetoggle前面,程式碼如下:
1 <script>
2             $(".btn-group").hover(function() {
3                 $(this).children("ul").stop(true, false).slideToggle();
4             });
5 </script>

然後,過渡動畫不會再無意義重複了!stop()方法簡單地來說,就是當滑鼠離開目標區域時,立即終止當前沒有執行完的過渡效果。

轉載於:https://www.cnblogs.com/yuhantao/p/5438860.html

相關文章