1 <!-- 事件触发前后执行其他操作的三种方式:
2 多适用于:公众号的订阅,有订阅的可以收到文章,没有订阅的收不到文章。
3 -->
4 <!DOCTYPE html>
5 <html lang="en">
6 <head>
7 <meta charset="UTF-8">
8 <title>动画</title>
9 <link rel="stylesheet" href="css/base.css">
10 <style>
11 .container {
12 width: 400px;
13 margin: 0 auto;
14 background: #f0f;
15 }
16 button {
17 width: 50%;
18 height: 30px;
19 text-align: center;
20 float: left;
21 }
22 .box {
23 width: 100%;
24 height: 400px;
25 }
26 </style>
27 </head>
28 <body>
29 <div class="container">
30 <button class="show">显示</button>
31 <button class="hide">隐藏</button>
32 <div class="box"></div>
33 </div>
34 <script src="js/jquery.js"></script>
35
36 <!-- 第一种方式:直接在JS事件触发前后 直接进行操作 -->
37 <!-- <script>
38 //静悄悄的显示
39 var silent = {
40 show:function($ele,showCallback,shownCallback){
41 // $ele.html("<p>我在显示之前已经显示了</p>");
42 if (typeof showCallback === 'function') showCallback();
43 $ele.show();
44 if (typeof shownCallback === 'function') shownCallback();
45 // setTimeout(function(){
46 // $ele.html($ele.text() + "<p>我在box显示之后显示</p>")
47 // },1000)
48 },
49 hide:function($ele){
50 $ele.hide();
51 }
52 };
53
54 var $box = $('.box');
55 var $show = $('.show');
56 var $hide = $('.hide');
57 //单击显示$box
58 $show.on('click',function(){
59 silent.show($box,function(){
60 $box.html("<p>我在显示之前已经显示了</p>");
61 },function(){
62 setTimeout(function(){
63 $box.html($box.text() + "<p>我在box显示之后显示</p>")
64 },1000)
65 });
66
67 // silent.show($box);
68 })
69 //单击显示$box
70 $hide.on('click',function(){
71 silent.hide($box);
72 })
73 </script> -->
74
75 <!-- 第二种方式:事件触发前后的操作,封装成两个函数,分别放于事件触发前后 -->
76 <!-- <script>
77 //静悄悄的显示
78 var silent = {
79 show:function($ele){
80 $ele.html("<p>我在显示之前已经显示了</p>");
81 $ele.show();
82 setTimeout(function(){
83 $ele.html($ele.html() + "<p>我在box显示之后显示</p>");
84 },1000);
85
86 },
87 hide:function($ele){
88 $ele.hide();
89 }
90 };
91
92 var $box = $('.box');
93 var $show = $('.show');
94 var $hide = $('.hide');
95 //单击显示$box
96 $show.on('click',function(){
97 silent.show($box);
98 })
99 //单击显示$box
100 $hide.on('click',function(){
101 silent.hide($box);
102 })
103 </script> -->
104 </body>
105 </html>
106 <!-- 第三种方式:事件触发前后的操作,使用trigger触发已经封装好的函数 -->
107 ===================
108 <!DOCTYPE html>
109 <html lang="en">
110 <head>
111 <meta charset="UTF-8">
112 <title>动画</title>
113 <!-- 一定要引入jQuery.js文件,否则无法运行 -->
114 <link rel="stylesheet" href="css/base.css">
115 <style>
116 .container {
117 width: 400px;
118 margin: 0 auto;
119 background: #f0f;
120 }
121 button {
122 width: 50%;
123 height: 30px;
124 text-align: center;
125 float: left;
126 }
127 .box {
128 width: 100%;
129 height: 400px;
130 }
131 </style>
132 </head>
133 <body>
134 <div class="container">
135 <button class="show">显示</button>
136 <button class="hide">隐藏</button>
137 <div class="box"></div>
138 </div>
139 <script src="js/jquery.js"></script>
140 <script>
141 //静悄悄的显示
142 var silent = {
143 show:function($ele){
144 //$ele显示之前触发$ele的show事件,所以要在外面给对象$ele绑定show事件
145 $ele.trigger('show');
146 $ele.show();
147 //$ele显示之后触发$ele的shown事件,所以要在外面给对象$ele绑定shown事件
148 $ele.trigger('shown');
149 },
150 hide:function($ele){
151 //$ele隐藏之后触发$ele的hide事件,所以要在外面给对象$ele绑定hide事件
152 $ele.trigger('hide');
153 $ele.hide();
154 //$ele隐藏之后触发$ele的hiden事件,所以要在外面给对象$ele绑定hiden事件
155 $ele.trigger('hiden');
156 }
157 };
158 var $box = $('.box');
159 var $show = $('.show');
160 var $hide = $('.hide');
161 //单击显示按钮 显示$box
162 $show.on('click',function(){
163 silent.show($box);
164 })
165 //单击隐藏按钮 隐藏$box
166 $hide.on('click',function(){
167 silent.hide($box);
168 })
169
170 //这里只是进行对象事件的绑定而已。绑定了四个事件,可以使用 e.type 进行判断具体执行哪个事件,从而执行相应的操作。
171 //该函数可以定义多次,执行其他操作。这是第一次定义:改变对象的html内容
172 //该函数定义多次,就执行多次,如console.log(e.type)就输出多次。
173 $box.on('show shown hide hiden',function(e){
174 //两个都是$box对象,这里只能使用$box,为什么不能使用$(this)呢?
175 console.log( $(this));
176 console.log( $box);
177
178 //每次触发事件时,判断其类型,指定对应类型的代码
179 if (e.type === 'show') {
180 $box.html('我在显示之前已经显示了');
181 }else if (e.type === 'shown') {
182 setTimeout(function(){
183 $box.html($box.html() + "<p>我在显示之后再显示</p>")
184 },1000);
185 }
186 })
187
188 //这里只是进行对象事件的绑定而已。绑定了四个事件,可以使用 e.type 进行判断具体执行哪个事件,从而执行相应的操作。
189 //该函数可以定义多次,执行其他操作。这是第二次定义:改变对象的背景颜色
190 //该函数定义多次,就执行多次,如console.log(e.type)就输出多次。
191 $box.on('show shown hide hiden',function(e){
192 console.log(e.type);
193 //两个都是$box对象,这里只能使用$box,为什么不能使用$(this)呢?
194 console.log( $(this));
195 console.log( $box);
196
197 //每次触发事件时,判断其类型,指定对应类型的代码
198 if (e.type === 'show') {
199 $box.css({background:'#f0f'});
200 }else if (e.type === 'shown') {
201 setTimeout(function(){
202 $box.css({background:'#00f'});
203 },2000);
204 }else if (e.type === 'hide') {
205 alert('在隐藏$box之前,跳出一个提示框');
206 }else if (e.type === 'hiden') {
207 setTimeout(function(){
208 var p = document.createElement('div');
209 var textNode = document.createTextNode('这是隐藏$box,1秒后显示的内容');
210 p.appendChild(textNode);
211 document.getElementsByTagName('body')[0].appendChild(p);
212 },1000);
213 }
214 })
215 </script>
216 </body>
217 </html>