原生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"  />‘+‘</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:需要源码的回复找我拿,挺简单的,不放上来了,楼主新手刚学。

时间: 2024-10-08 19:34:56

原生JS+tween.js模仿微博发布效果的相关文章

学前端开发:js 原生模仿微博发布

初学前端开发,需要掌握的基础项目案例:js 原生模仿微博发布 <!DOCTYPE html> <html> <head> <metacharset="UTF-8"> <title></title> </head> <styletype="text/css"> *{ margin:0; padding:0; list-style:none; font-family:&quo

VUE实现微博发布效果

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>微博发布效果</title> <style> body, ul, p { margin: 0; padding: 0; } .weibo { width: 600px; border: 1px solid #ccc; margin: 100px auto; padding: 10px;

window.requestAnimationFrame与Tween.js配合使用实现动画缓动效果

window.requestAnimationFrame 概述 window.requestAnimationFrame()这个方法是用来在页面重绘之前,通知浏览器调用一个指定的函数,以满足开发者操作动画的需求.这个方法接受一个函数为参,该函数会在重绘前调用. 注意: 如果想得到连贯的逐帧动画,函数中必须重新调用 requestAnimationFrame(). 如果你想做逐帧动画的时候,你应该用这个方法.这就要求你的动画函数执行会先于浏览器重绘动作.通常来说,被调用的频率是每秒60次,但是一般

tween.js 用户指南 - 与 Three.js 配合使用的补间动画库

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. Learning Three.js - Tween.js for Smooth Animation tween.js 用户指南tween.js u

javascript -- (tween.js简单动画制作)

声明:tween.js -- github.com -- search --下载 /***导入tween.js**/ <script type="text/javascript" src="js/tween.js" ></script> /***style样式**/ <style> #wrap { position: relative;/***相对定位**/ } #box { position: absolute;/***绝对定位

原生JavaScript 全特效微博发布面板效果实现

javaScript实现微博发布面板效果.采用的js知识有: 正则表达式区分中英文字节.随机数生成等函数 淡入淡出.缓冲运动.闪动等动画函数 onfocus.onblur.oninput.onpropertychange等事件 动态添加元素,获取设置动态属性 基本思路: 当内容为空时,发布按钮为灰色,点击时候文本框会闪动,输入文字会提示还可以输入多少文字,超出会提示,且不能发布,要注意的是,判断文本框内容的长度,不能直接来,因为英文属于一个字节,中文占两个,要用正则处理一下! 获取到所有头像的s

tween.js的动画效果

实现动画可以用好多种的方法,今天来看看用tween.js插件是如何实现动画效果的.  tween.js的使用 1.下载 2.引入 3.使用tween.js语法 需要哪些条件来做运动 1.初始位置 2.目标点 缓动函数 1.linear 匀速 2.Quad 二次方缓动效果 3.Cubic 三次方缓动效果 4.Quart 四次方缓动效果 5.Quint 五次方缓动效果 6.Sine  正弦缓动效果 7.Expo  指数缓动效果 8.Circ  圆形缓动函数 9.Elastic 指数衰减正弦曲线缓动函

js微博发布框的实现

引用前请标明出处:http://www.cnblogs.com/zkhzz/ 谢谢 观察了微博发布框, 1.发现他的剩余文字是动态改变的, 2.且文字为零时 发布框颜色为暗色 3.文字不符合标准时提交不通过 整理了一下思路 js会主要用到的方法 1.onclick() //点击发布时触发 2.onmouseover()// 鼠标滑到 发布  触发 3.onmouseout() //鼠标离开 发布  时触发 4.onfocus() //点击到 输入框 时触发 5.onblur() //点击到 输入

Tween.js 动画效果

一.apply,和call的用法. 先来一个与本次博文无关的东西,就是apply和call的用法.其实apply和call的用法都一样,只是他们的传参不一样.apply是数组,而call是单独的传,类似枚举. 1.列子一把arguments转化为标准数组,可以使用push等方法. function test(){ //arguments.push(5); //arguments.push is not a function console.log(arguments) var arg = Arr