So verwenden Sie Vue+CSS3 zum Erstellen interaktiver Effekte

php中世界最好的语言
Freigeben: 2017-11-27 15:18:13
Original
2586 Leute haben es durchsucht

Wir wissen, dass bei der Durchführung von Projekten auf jeden Fall interaktive Effekte oder Spezialeffekte verwendet werden. Bei der Entwicklung des Technologie-Stacks habe ich Vue+CSS3 verwendet Diese Spezialeffekte für die Vue+CSS3-Entwicklung sind sehr einfach zu verwenden. Heute werde ich Ihnen ein solches Tutorial vorstellen.

1. Obwohl der Code im Artikel sehr einfach und nicht schwer zu verstehen ist, wird empfohlen, ihn beim Schreiben zu lesen, um Verwirrung zu vermeiden.
2. Die im Artikel erwähnten kleinen Beispiele sind sehr einfach. Sie können sie nach Ihren eigenen Vorstellungen erweitern oder ändern, was unerwartete Auswirkungen haben kann. Wenn ich diese Art von Artikeln schreibe, möchte ich den Menschen auch das Angeln beibringen, und nicht ihnen das Angeln beibringen!
3. Diese Beispiele stammen aus meinen eigenen täglichen Übungsprojekten und der Code wurde auf Github (vue-demos) erwähnt. Begrüßen Sie alle zum Star.

2. Eröffnungsanimation

Prinzipanalyse

Apropos Prinzipanalyse: Wenn sich die Seite im folgenden Zustand befindet, ersetzen Sie den Text. Dass die Schriftart zu einer Kugel schrumpft, ist der Kontrolleffekt des CSS-Attributs letter-spacing. Die Schriftunschärfe ist der Kontrolleffekt des CSS-Attributs „blur()“! Sie können sehen, dass es schrittweise Änderungen gibt, was der Effekt der CSS3-Animation ist.

Lassen Sie uns kurz die Schritte dieser Animation analysieren. Wie Sie unten sehen können, besteht diese Animation aus insgesamt 8 Schritten.

Jetzt ist klar, dass wir im Moment im Bild unten mit der Textänderung beginnen wollen, d. h. zwei Sekunden nach dem Laden der Seite wird die Animation zweimal ausgeführt, bevor mit der Textänderung begonnen wird. Dann ändern Sie den Text alle zwei Sekunden bis zum Ende!

Die Codes für zwei Methoden, Vue und Javascript, sind unten aufgeführt.

vue-Methode

<!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:&#39;#text&#39;,         data:{             nowIndex:0,             testText:&#39;欢迎浏览&#39;         },         mounted(){             let _this=this;             let timer = setInterval(function(){                 _this.nowIndex++;                 switch (_this.nowIndex) {                     case 1:                         _this.testText = &#39;守候的文章&#39;;                         break;                     case 2:                         _this.testText = &#39;愿您浏览愉快&#39;;                         break;                     case 3:                         _this.testText = &#39;学到知识&#39;;                         break;                 }                 if (_this.nowIndex > 3) {                     setTimeout(() => {                         clearInterval(timer);                     }, 2000)                 }             }, 2000)         }     }) </script> </html>
Nach dem Login kopieren

Javascript-Methode

<!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(&#39;h1&#39;),nowIndex=0;     console.log(oH1)     var timer = setInterval(function () {         nowIndex++;         switch (nowIndex) {             case 1:                 oH1.innerHTML = &#39;守候的文章&#39;;                 break;             case 2:                 oH1.innerHTML = &#39;愿您浏览愉快&#39;;                 break;             case 3:                 oH1.innerHTML = &#39;学到知识&#39;;                 break;         }         if (nowIndex > 3) {             setTimeout(() => {                 clearInterval(timer);             }, 2000)         }     }, 2000) </script> </html>
Nach dem Login kopieren

3. Navigationsschieberegler

Betriebseffekt

Prinzipielle Analyse

Hier ist zunächst die Position des orangefarbenen Schiebereglers beim Initialisieren der Seite

Setzen Sie die Maus auf die zweite Registerkarte. Wie Sie sehen können, wird der orangefarbene Schieberegler um eine Registerkarte nach rechts verschoben .

Setzen Sie die Maus auf die dritte Registerkarte. Sie können sehen, dass der orangefarbene Schieberegler um den Abstand von zwei Registerkarten nach rechts versetzt ist.

Wenn Sie von der ersten Registerkarte zu den Indizes wechseln der sechs Tabs sind 0,1,2,3,4,5.

Dann lautet die Formel des Schiebereglers (Index * Tabulatorbreite). Wie Sie sehen können, ist der Effekt, der allmählich vorübergeht, tatsächlich der Effekt des CSS3-Übergangs. Schauen Sie sich einfach den Code unten an, Sie werden ihn auf einen Blick verstehen! Der Code lautet wie folgt:

vue-Methode

<!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 class="nav clear" id="nav" @mouseleave="nowIndex=0">     <ul>         <li @mouseenter.stop="nowIndex=0"><span>Tab One</span></li>         <li @mouseenter.stop="nowIndex=1"><span>Tab Two</span></li>         <li @mouseenter.stop="nowIndex=2"><span>Tab Three</span></li>         <li @mouseenter.stop="nowIndex=3"><span>Tab four</span></li>         <li @mouseenter.stop="nowIndex=4"><span>Tab five</span></li>         <li @mouseenter.stop="nowIndex=5"><span>Tab six</span></li>     </ul>     <div class="slider" :style="{&#39;transform&#39;:&#39;translate3d(&#39;+nowIndex*100+&#39;px,0,0)&#39;}"></div> </div> </body> <script src="vue.min.js"></script> <script type="text/javascript">    new Vue({        el:&#39;#nav&#39;,        data:{            nowIndex:0        }    }) </script> </html>
Nach dem Login kopieren

Javascript-Methode

<!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 class="nav clear" id="nav">     <ul>         <li><span>Tab One</span></li>         <li><span>Tab Two</span></li>         <li><span>Tab Three</span></li>         <li><span>Tab four</span></li>         <li><span>Tab five</span></li>         <li><span>Tab six</span></li>     </ul>     <div class="slider"></div> </div> </body> <script type="text/javascript">     var oDiv=document.querySelector("#nav"),oLi=oDiv.querySelectorAll("li"),oSlider=document.querySelector(".slider");     oDiv.addEventListener("mouseleave",function () {         oSlider.style.transform=&#39;translate3d(0,0,0)&#39;;     })     for(var i=0;i<oLi.length;i++){         oLi[i].index=i;         oLi[i].addEventListener("mouseenter",function (e) {             oSlider.style.transform=&#39;translate3d(&#39;+this.index*100+&#39;px,0,0)&#39;;         })     } </script> </html>
Nach dem Login kopieren

4. Der blaue Rahmen ist li, Der schwarze Rahmen ist Was Sie oben sehen, ist div

, das tatsächlich den Offset von ul (transform:translate3d) steuert. Die Berechnungsformel ähnelt dem obigen Schieberegler, Index (0|1|2|3)*Breite von li. Der Unterschied besteht darin, dass der Versatz von ul eine negative Zahl ist, da ul sich nach links bewegen möchte und der Schieberegler oben sich nach rechts bewegen möchte!

Wenn das erste Bild aufgenommen wird, wird der ul-Offset festgelegt (Transformation: Translate3d(0px, 0px, 0px)).

Wenn Sie das zweite Bild aufnehmen, legen Sie den ul-Offset fest (Transformation: translator3d(-1000px, 0px, 0px)).
Wenn Sie das zweite Bild aufnehmen, legen Sie den ul-Offset fest (Transformation: translator3d(-2000px, 0px, 0px)). Analog lässt sich der Offset ganz einfach berechnen!

Vielleicht ist das, was ich gesagt habe, für Sie etwas verwirrend, aber wenn Sie sich den Code unten ansehen, werden Sie nicht verwirrt sein, denn der Code ist auch sehr einfach!

Vue-Methode

Javascript-Methode
<!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 class="slide-img clear" id="slide-img">     <!--用tran这个class控制ul是否含有过渡效果,样式已经写好-->     <ul :style="{&#39;width&#39;:(listWidth*list.length)+&#39;px&#39;,&#39;transform&#39;:&#39;translate3d(-&#39;+(listWidth*nowIndex)+&#39;px,0,0)&#39;}">         <!--遍历出来的图片-->         <li v-for="(li,index) in list" :style="{&#39;width&#39;:listWidth+&#39;px&#39;}">             <a href="javascript:;">                 <img :src="li" class="slider-img"/>             </a>         </li>     </ul>     <div class="slide-option">         <span v-for="(li,index) in list" :class="{&#39;active&#39;:index===nowIndex}"></span>     </div>     <div class="slide-arrow">         <div class="arrow-left" @click.stop="switchDo(&#39;reduce&#39;)"></div>         <div class="arrow-right" @click.stop="switchDo"></div>     </div> </div> </body> <script src="vue.min.js"></script> <script type="text/javascript">     new Vue({         el: &#39;#slide-img&#39;,         data: {             nowIndex: 0,             listWidth: &#39;1000&#39;,             list: [&#39;./images/timg1.jpg&#39;, &#39;./images/timg2.jpg&#39;, &#39;./images/timg3.jpg&#39;, &#39;./images/timg4.jpg&#39;],             timer:null         },         methods: {             //滑动操作             switchDo(reduce){                 clearInterval(this.timer);                 //根据reduce判断this.nowIndex的增加或者减少!                 if(reduce===&#39;reduce&#39;){                     //如果是第一张,就返回最后一张                     if(this.nowIndex===0){                         this.nowIndex=this.list.length-1;                     }                     else{                         this.nowIndex--;                     }                 }                 else{                     //如果是最后一张,就返回第一张                     if(this.nowIndex===this.list.length-1){                         this.nowIndex=0;                     }                     else{                         this.nowIndex++;                     }                 }                 var _this=this;                 this.timer=setInterval(function () {                     _this.switchDo();                 },4000)             },         },         mounted(){             var _this=this;             this.timer=setInterval(function () {                 _this.switchDo();             },4000)         }     }) </script> </html>
Nach dem Login kopieren

5. Zusammenfassung
<!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 class="slide-img clear" id="slide-img">     <!--用tran这个class控制ul是否含有过渡效果,样式已经写好-->     <ul id="slide-img-ul">         <!--遍历出来的图片-->         <li style="width: 1000px;"><a href="javascript:;"><img src="images/timg1.jpg" class="slider-img"/></a></li>         <li style="width: 1000px;"><a href="javascript:;"><img src="images/timg2.jpg" class="slider-img"/></a></li>         <li style="width: 1000px;"><a href="javascript:;"><img src="images/timg3.jpg" class="slider-img"/></a></li>         <li style="width: 1000px;"><a href="javascript:;"><img src="images/timg4.jpg" class="slider-img"/></a></li>     </ul>     <div class="slide-option">         <span></span>         <span></span>         <span></span>         <span></span>     </div>     <div class="slide-arrow">         <div class="arrow-left"></div>         <div class="arrow-right"></div>     </div> </div> </body> <script type="text/javascript">     window.onload=function () {         var oUl=document.querySelector(&#39;#slide-img-ul&#39;);         var oLi=oUl.querySelectorAll(&#39;li&#39;);         var oSpan=document.querySelector(&#39;.slide-option&#39;).querySelectorAll(&#39;span&#39;);         var oArrowLeft=document.querySelector(&#39;.arrow-left&#39;);         var oArrowRight=document.querySelector(&#39;.arrow-right&#39;);         oUl.style.width=&#39;4000px&#39;;         oArrowLeft.addEventListener(&#39;click&#39;,function () {             switchDo(&#39;reduce&#39;);         })         oArrowRight.addEventListener(&#39;click&#39;,function () {             switchDo();         })         var timer=null,nowIndex=0;         function switchDo(reduce){             clearInterval(timer);             //设置样式             oUl.style.transform=&#39;translate3d(-&#39;+(1000*nowIndex)+&#39;px,0,0)&#39;;             for (var i=0;i<oSpan.length;i++){                 if(i===nowIndex){                     oSpan[i].className=&#39;active&#39;;                 }                 else{                     oSpan[i].className=&#39;&#39;;                 }             }             //根据reduce判断this.nowIndex的增加或者减少!             if(reduce===&#39;reduce&#39;){                 //如果是第一张,就返回最后一张                 if(nowIndex===0){                     nowIndex=oLi.length-1;                 }                 else{                     nowIndex--;                 }             }             else{                 //如果是最后一张,就返回第一张                 if(nowIndex===oLi.length-1){                     nowIndex=0;                 }                 else{                     nowIndex++;                 }             }             timer=setInterval(function () {                 switchDo();             },4000)         }         switchDo();     } </script> </html>
Nach dem Login kopieren

Okay, über die Spezialeffekte der Vue+CSS3-Entwicklung und Das war's mit dem Vergleich von Javascript + CSS3. Ich hoffe, dass diese drei kleinen Beispiele jedem helfen können, zu verstehen, wie man mit Vue + CSS3 Spezialeffekte entwickelt. Die drei kleinen Beispiele, über die ich heute spreche, sollen Ihnen keine Codes zum Kopieren und Einfügen geben, aber ich hoffe, sie können als Ausgangspunkt dienen und Ihr Denken erweitern! Wie ich in meinem vorherigen Artikel sagte, schreibe ich den Artikel in der Hoffnung, dazu beizutragen, den Menschen das Angeln beizubringen, anstatt ihnen das Angeln beizubringen! Wenn Sie schließlich der Meinung sind, dass ich etwas falsch oder falsch geschrieben habe, oder wenn Sie weitere Vorschläge haben, weisen Sie bitte darauf hin! Lassen Sie alle voneinander lernen und gemeinsam Fortschritte machen!

Ich glaube, dass Sie die Methoden beherrschen, nachdem Sie diese Fälle gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!


Verwandte Lektüre:

So erzeugen Sie den Ladeeffekt von CSS3


CSS So konvertieren Sie die Kodierung


So verwenden Sie Canvas, um den Effekt einer Partikelfontänenanimation zu erzeugen

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Vue+CSS3 zum Erstellen interaktiver Effekte. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
css
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage