1.文章上面的代碼,雖然代碼很簡單,不難理解,但是也是建議大家邊寫邊看,這樣不會混亂。
2.文章所提及的小實例,都是很基礎的,大家可以參照自己的想法進行擴展,或者修改,可能會有意想不到的效果。我寫這類型的文章也是想授人以漁,不是授人以魚!
3.這幾個實例,摘自我自己的平常練習的項目,代碼已經提到github上面了(vue-demos)。歡迎大家star。
2.開場小動畫
原理分析
說到原理分析,其實也沒什么可以分析的,就是在頁面是下面這個狀態的時候,把文字替換掉。至于看到字體縮成一團,就是letter-spacing這個html' target='_blank'>css屬性的控制效果。字體模糊就是filter: blur()這個css屬性的控制效果!看到有逐漸的變化,就是css3動畫(animation)的效果
下面簡單分析下,這個動畫的幾個步驟,從下面看到,這個動畫一共8個步驟。
這下就清晰明了了,我們要在下圖這個瞬間開始改變文字,也就是頁面加載了兩秒后,動畫執行了兩次后就開始改變文字。然后每隔兩秒改變一次文字,直到最后!
下面給出vue和javascript兩種方式的代碼,看下哪種方式更加的簡單!
vue方式
!DOCTYPE html html lang= en head meta charset= UTF-8 title Title /title /head style body{ background: #ccc; } h1 { color: white; text-transform: uppercase; margin-top: 100px; text-align: center; font-size: 6rem; line-height: 1; animation: letterspacing 1s 7 alternate ease-in-out; display: block; letter-spacing: .5rem; } @keyframes letterspacing { 0% { letter-spacing: -72px; filter: blur(20px); } 40% { filter: blur(6px); } 80% { letter-spacing: 8px; filter: blur(0); } } /style body div id= text h1 {{testText}} /h1 /div /body script src= vue.min.js /script script type= text/javascript new Vue({ el: #text , data:{ nowIndex:0, testText: 歡迎瀏覽 }, mounted(){ let _this=this; let timer = setInterval(function(){ _this.nowIndex++; switch (_this.nowIndex) { case 1: _this.testText = 守候的文章 break; case 2: _this.testText = 愿您瀏覽愉快 break; case 3: _this.testText = 學到知識 break; } if (_this.nowIndex 3) { setTimeout(() = { clearInterval(timer); }, 2000) } }, 2000) } }) /script /html
javascript方式
!DOCTYPE html html lang= en head meta charset= UTF-8 title Title /title /head style body{ background: #ccc; } h1 { color: white; text-transform: uppercase; margin-top: 100px; text-align: center; font-size: 6rem; line-height: 1; animation: letterspacing 1s 7 alternate ease-in-out; display: block; letter-spacing: .5rem; } @keyframes letterspacing { 0% { letter-spacing: -6rem; filter: blur(1rem); } 40% { filter: blur(.3rem); } 80% { letter-spacing: .5rem; filter: blur(0rem); } } /style body div id= text h1 歡迎瀏覽 /h1 /div /body script var oH1=document.querySelector( h1 ),nowIndex=0; console.log(oH1) var timer = setInterval(function () { nowIndex++; switch (nowIndex) { case 1: oH1.innerHTML = 守候的文章 break; case 2: oH1.innerHTML = 愿您瀏覽愉快 break; case 3: oH1.innerHTML = 學到知識 break; } if (nowIndex 3) { setTimeout(() = { clearInterval(timer); }, 2000) } }, 2000) /script /html
3.導航滑塊
運行效果
原理分析
首先,下面是頁面初始化的時候,橙色滑塊的位置
鼠標放到第二個tab上面,大家可以看到,橙色滑塊就是向右偏移了一個tab的距離
鼠標放到第三個tab上面,大家可以看到,橙色滑塊就是向右偏移了兩個tab的距離
如果從第一個tab到第六個tab的索引是0,1,2,3,4,5。
那么滑塊的公式就是(索引*tab的寬度)。大家看到有逐漸過去的效果,其實是css3過渡(transition)的效果。大家看下面的代碼就行了,一看就懂!代碼如下:
vue方式
!DOCTYPE html html lang= en head meta charset= UTF-8 title Title /title /head link rel= stylesheet href= reset.css style .nav{ margin: 40px; position: relative; } .nav li{ float: left; width: 100px; height: 40px; line-height: 40px; color: #fff; text-align: center; background: #09f; cursor: pointer; } .nav span{ position: relative; z-index: 2; } .nav .slider{ position: absolute; transition: all .5s cubic-bezier(0.4, -0.3, 0.57, 1.38); width: 100px; height: 40px; background: #f90; top: 0; left: 0; z-index: 1; } /style body div >
javascript方式
!DOCTYPE html html lang= en head meta charset= UTF-8 title Title /title /head link rel= stylesheet href= reset.css style .nav{ position: relative; } .nav li{ float: left; width: 100px; height: 40px; line-height: 40px; color: #fff; text-align: center; background: #09f; cursor: pointer; } .nav span{ position: relative; z-index: 2; } .nav .slider{ position: absolute; transition: all .5s cubic-bezier(0.4, -0.3, 0.57, 1.38); width: 100px; height: 40px; background: #f90; top: 0; left: 0; z-index: 1; } /style body div >
4.輪播圖
藍框的是li,黑框的是div
看到上面,其實也就是控制ul的偏移量(transform:translate3d)。計算公式和上面的滑塊相似,索引(0|1|2|3)*li的寬度。不同的就是,ul的偏移量是取負數,因為ul是想左偏,上面的滑塊是向右偏! 當第一張圖片的時候,ul偏移量設置(transform: translate3d(0px, 0px, 0px))。 當第二張圖片的時候,ul偏移量設置(transform: translate3d(-1000px, 0px, 0px))。 當第二張圖片的時候,ul偏移量設置(transform: translate3d(-2000px, 0px, 0px))。以此類推,偏移量很簡單的就能計算出來!
可能我說的大家有點懵,但是,看下面的代碼,就不會懵了,因為代碼也很簡單!
vue方式
!DOCTYPE html html lang= en head meta charset= UTF-8 title Title /title link rel= stylesheet href= reset.css style .slide-img { width: 1000px; height: 500px; overflow: hidden; position: relative; margin: 20px auto; } ul { transition: all .5s ease; } li { float: left; } .slide-arrow div { width: 50px; height: 100px; position: absolute; margin: auto; top: 0; bottom: 0; background: url( http://i1.bvimg.com/1949/4d860a3067fab23b.jpg ) no-repeat; } .arrow-right { transform: rotate(180deg); right: 0; } .arrow-left { left: 0; } .slide-option{ position: absolute; bottom: 10px; width: 100%; left: 0; text-align: center; } .slide-option span{ display: inline-block; width: 14px; height: 14px; border-radius: 100%; background: #ccc; margin: 0 10px; } .slide-option .active{ background: #09f; } /style /head body div >
javascript方式
!DOCTYPE html html lang= en head meta charset= UTF-8 title Title /title link rel= stylesheet href= reset.css style .slide-img { width: 1000px; height: 500px; overflow: hidden; position: relative; margin: 20px auto; } ul { transition: all .5s ease; } li { float: left; } .slide-arrow div { width: 50px; height: 100px; position: absolute; margin: auto; top: 0; bottom: 0; background: url( http://i1.bvimg.com/1949/4d860a3067fab23b.jpg ) no-repeat; } .arrow-right { transform: rotate(180deg); right: 0; } .arrow-left { left: 0; } .slide-option{ position: absolute; bottom: 10px; width: 100%; left: 0; text-align: center; } .slide-option span{ display: inline-block; width: 14px; height: 14px; border-radius: 100%; background: #ccc; margin: 0 10px; } .slide-option .active{ background: #09f; } /style /head body div >
5.小結
好了,關于vue+css3開發的特效,以及和javascript+css3的對比,就說到這里了,希望這三個小實例,能幫到大家了解下應該怎么使用vue+css3開發特效的。今天講這三個小實例不是說給大家代碼,讓大家復制粘貼使用,而是希望能起到一個拋磚引玉的作用,拓展思維的作用!就像我之前寫文章說得那樣,我寫文章是希望能起到一個授人以漁的作用,而不是授人以魚!最后,如果大家覺得有什么地方我寫錯了,寫錯不好,或者有其它什么建議,歡迎指出!讓大家相互學習,共同進步!
相信看了這些案例你已經掌握了方法,更多精彩請關注php 其它相關文章!
相關閱讀:
CSS3的loading特效怎么制作
CSS的編碼怎么轉換
怎樣用canvas做出粒子噴泉動畫的效果
以上就是用Vue+CSS3怎么做交互特效的詳細內容,html教程
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答