原生JS+tween.js模仿微博發布效果


轉載請注明出處:http://www.cnblogs.com/zhangmingze/p/4816865.html

1、先看效果吧,有效果才有動力:

2、html結構:

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8" />
 5         <title>模仿微博發布效果</title>
 6         <link rel="stylesheet" href="css/index.css" />
 7     </head>
 8     <body>
 9         <div id="container">
10             <form action="">
11                 <p class="name-text">
12                     <label>用戶 : <input type="text" id="username" /></label>
13                 </p>
14                 <textarea id="content"></textarea>
15                 <p class="tip">
16                     <span class="left-tip" id="warn">還可以輸入<span id="num">140</span>個字</span>
17                     <a href="javascript:void(0);" id="submit">發布</a>
18                 </p>
19             </form>
20             <ul id="list"></ul>
21         </div>
22         <script src="js/tween.js"></script>
23         <script src="js/app.js"></script>
24     </body>
25 </html>

2、css樣式這個就不貼了,看圖敲效果,不會可以找我要源碼

3、js部分不復雜,最主要是理解運動過程,運動過程每個運動都可以用這個方法思路,誰用誰知道

 1 var sBtn = document.getElementById('submit');
 2 var username = document.getElementById('username');
 3 var content = document.getElementById('content');
 4 var list = document.getElementById('list');
 5 var num = document.getElementById('num'); 7 
 8 sBtn.onclick=function(){
 9     if(username.value &&content.value){
10         //創建li節點
11         var li = document.createElement('li'); 
12         //本來要用createElement,為了省事,直接用innerHTML
13         li.innerHTML = '<div class="head-img">'+
14                         '<img src="img/1.gif" alt="" />'+'</div>'+
15                         '<div class="user-info">'+'<p class="user-name"><span>'+
16                         username.value+'</span><a href="javascript:void(0);" id="del">刪除</a></p>'
17                         +'<p class="text">'+content.value+'</p></div>';
18         //添加在頭部
19         list.insertBefore(li,list.children[0]);
20         //下面是運動過程,步長,起點,終點,使用定時器
21         var timer = null;
22         var end = li.offsetHeight;
23         var start = 0;
24         var t=0;
25         var maxT=30
26         li.style.height = 0;  //初始讓li標簽高度為0,不然高度會初始化,導致閃一下
27         timer = setInterval(function(){
28             t++;
29             if(t>maxT){
30                 clearInterval(timer);
31                 li.style.height = end + 'px';
32             }
33             //不用tween.js即為線性運動
34             //li.style.height = end/maxT*t + start + 'px';
35             //碰撞效果,使用tween.js動畫插件
36             li.style.height = Tween.Bounce.easeOut(t,start,end,maxT) + 'px';
37         },30);
38         
39         username.value = content.value = "";
40         
41         var del = document.getElementById('del');
42         //刪除內容按鈕
43         del.onclick=function(){
44             var start = li.offsetHeight;  //初始的高度
45             var end = 0;                  //最后高度為0,然后刪除節點
46             var change = end - start;     //間隔距離
47             var t=0;                     
48             var maxT=30;            
49             var uptimer = null;
50             uptimer = setInterval(function(){
51                 t++;
52                 if(t>=maxT){
53                     clearInterval(uptimer);
54                     li.parentNode.removeChild(li);  //當高度為0時清除定時器並刪除節點
55                 }
56                 //同上
57                 //li.style.height = change/maxT*t + start + 'px';
58                 //同上
59                 li.style.height = Tween.Bounce.easeOut(t,start,change,maxT)+ 'px';
60             },30);
61         };
62     }
63     else{
64         (!username.value)?username.focus():content.focus();
65     }
66 };
67     //oninput是html5事件,IE8以上
68     content.oninput=function(){
69         num.innerHTML = 140 - this.value.length;
70     };
71     //IE4 - IE10,IE專有,兼容IE
72     content.onpropertychange=function(e){
73         var e = e||window.event;
74         if(e.propertyName.toLowerCase()=="value"){
75             num.innerHTML = 140 - this.value.length;
76         }
77     };

這樣就差不多了,tween.js插件比較容易使用,只需要一行代碼

Tween.Bounce(還有其他效果).easeOut(有easeIn,easeInOut)(t,start,change,maxT)  //每次步長,開始位置,相隔距離,總步長

tween.js就是貝塞爾曲線啦,樓主只會用,不會貝塞爾曲線

 

tip:需要源碼的回復找我拿,挺簡單的,不放上來了,樓主新手剛學。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM