zoukankan      html  css  js  c++  java
  • 原生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:需要源码的回复找我拿,挺简单的,不放上来了,楼主新手刚学。

  • 相关阅读:
    S3C44b0x通用延时函数,延时time个100us函数理解
    LeetCode-058-最后一个单词的长度
    LeetCode-053-最大子序和
    LeetCode-035-搜索插入位置
    LeetCode-027-移除元素
    LeetCode-026-删除有序数组中的重复项
    LeetCode-025-K 个一组翻转链表
    LeetCode-024-两两交换链表中的节点
    LeetCode-023-合并K个升序链表
    LeetCode-021-合并两个有序链表
  • 原文地址:https://www.cnblogs.com/zhangmingze/p/4816865.html
Copyright © 2011-2022 走看看