最近学到了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()方法简单地来说,就是当鼠标离开目标区域时,立即终止当前没有执行完的过渡效果。 |