久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

也許 vue css3 做交互特效更簡單

 就這樣了__ 2018-01-29

1.前言

做項目就難免會開發(fā)交互效果或者特效,而我最近開發(fā)的項目一直在使用 vue,,開發(fā)技術(shù)棧方面,,理所當(dāng)然就使用了 vue css3開發(fā),過程中發(fā)現(xiàn)使用 vue css3開發(fā)特效,,和 javascript/ jquery css3的思維方式不一樣,,但是比 javascript/ jquery css3簡單一點(diǎn)點(diǎn)。今天就分享三個簡單的小實(shí)例,,希望能起到拓展思維的作用,讓大家明白vue css3應(yīng)該怎樣開發(fā)交互效果,!如果大家有什么好的建議,,或者覺得我哪里寫錯了,歡迎指出,!

  1. 文章上面的代碼,,雖然代碼很簡單,不難理解,,但是也是建議大家邊寫邊看,,這樣不會混亂。

  2. 文章所提及的小實(shí)例,,都是很基礎(chǔ)的,,大家可以參照自己的想法進(jìn)行擴(kuò)展,或者修改,可能會有意想不到的效果,。我寫這類型的文章也是想授人以漁,,不是授人以魚!

  3. 這幾個實(shí)例,,摘自我自己的平常練習(xí)的項目,,代碼已經(jīng)提到github上面了(vue-demos)。歡迎大家star,。

2.開場小動畫

運(yùn)行效果

gif圖模糊效果看著跟實(shí)際效果不太一樣,!大家注意!

原理分析

說到原理分析,,其實(shí)也沒什么可以分析的,,就是在頁面是下面這個狀態(tài)的時候,把文字替換掉,。至于看到字體縮成一團(tuán),,就是 letter-spacing這個 css屬性的控制效果。字體模糊就是 filter:blur()這個 css屬性的控制效果,!看到有逐漸的變化,,就是css3動畫( animation)的效果

下面簡單分析下,這個動畫的幾個步驟,,從下面看到,,這個動畫一共8個步驟。

這下就清晰明了了,,我們要在下圖這個瞬間開始改變文字,,也就是頁面加載了兩秒后,動畫執(zhí)行了兩次后就開始改變文字,。然后每隔兩秒改變一次文字,,直到最后!

下面給出 vuejavascript兩種方式的代碼,,看下哪種方式更加的簡單,!

vue方式
  1.    <!DOCTYPE html>

  2.    <html lang='en'>

  3.    <head>

  4.        <meta charset='UTF-8'>

  5.        <title>Title</title>

  6.    </head>

  7.    <style>

  8.        body{

  9.            background: #ccc;

  10.        }

  11.        h1 {

  12.            color: white;

  13.            text-transform: uppercase;

  14.            margin-top: 100px;

  15.            text-align: center;

  16.            font-size: 6rem;

  17.            line-height: 1;

  18.            animation: letterspacing 1s 7 alternate ease-in-out;

  19.            display: block;

  20.            letter-spacing: .5rem;

  21.        }

  22.        @keyframes letterspacing {

  23.            0% {

  24.                letter-spacing: -72px;

  25.                filter: blur(20px);

  26.            }

  27.            40% {

  28.                filter: blur(6px);

  29.            }

  30.            80% {

  31.                letter-spacing: 8px;

  32.                filter: blur(0);

  33.            }

  34.        }

  35.    </style>

  36.    <body>

  37.    <div id='text'>

  38.        <h1>{{testText}}</h1>

  39.    </div>

  40.    </body>

  41.    <script src='vue.min.js'></script>

  42.    <script type='text/javascript'>

  43.        new Vue({

  44.            el:'#text',

  45.            data:{

  46.                nowIndex:0,

  47.                testText:'歡迎瀏覽'

  48.            },

  49.            mounted(){

  50.                let _this=this;

  51.                let timer = setInterval(function(){

  52.                    _this.nowIndex ;

  53.                    switch (_this.nowIndex) {

  54.                        case 1:

  55.                            _this.testText = '守候的文章';

  56.                            break;

  57.                        case 2:

  58.                            _this.testText = '愿您瀏覽愉快';

  59.                            break;

  60.                        case 3:

  61.                            _this.testText = '學(xué)到知識';

  62.                            break;

  63.                    }

  64.                    if (_this.nowIndex > 3) {

  65.                        setTimeout(() => {

  66.                            clearInterval(timer);

  67.                        }, 2000)

  68.                    }

  69.                }, 2000)

  70.            }

  71.        })

  72.    </script>

  73.    </html>

javascript方式
  1.    <!DOCTYPE html>

  2.    <html lang='en'>

  3.    <head>

  4.        <meta charset='UTF-8'>

  5.        <title>Title</title>

  6.    </head>

  7.    <style>

  8.        body{

  9.            background: #ccc;

  10.        }

  11.        h1 {

  12.            color: white;

  13.            text-transform: uppercase;

  14.            margin-top: 100px;

  15.            text-align: center;

  16.            font-size: 6rem;

  17.            line-height: 1;

  18.            animation: letterspacing 1s 7 alternate ease-in-out;

  19.            display: block;

  20.            letter-spacing: .5rem;

  21.        }

  22.        @keyframes letterspacing {

  23.            0% {

  24.                letter-spacing: -6rem;

  25.                filter: blur(1rem);

  26.            }

  27.            40% {

  28.                filter: blur(.3rem);

  29.            }

  30.            80% {

  31.                letter-spacing: .5rem;

  32.                filter: blur(0rem);

  33.            }

  34.        }

  35.    </style>

  36.    <body>

  37.    <div id='text'>

  38.        <h1>歡迎瀏覽</h1>

  39.    </div>

  40.    </body>

  41.    <script>

  42.        var oH1=document.querySelector('h1'),nowIndex=0;

  43.        console.log(oH1)

  44.        var timer = setInterval(function () {

  45.            nowIndex ;

  46.            switch (nowIndex) {

  47.                case 1:

  48.                    oH1.innerHTML = '守候的文章';

  49.                    break;

  50.                case 2:

  51.                    oH1.innerHTML = '愿您瀏覽愉快';

  52.                    break;

  53.                case 3:

  54.                    oH1.innerHTML = '學(xué)到知識';

  55.                    break;

  56.            }

  57.            if (nowIndex > 3) {

  58.                setTimeout(() => {

  59.                    clearInterval(timer);

  60.                }, 2000)

  61.            }

  62.        }, 2000)

  63.    </script>

  64.    </html>

3.導(dǎo)航滑塊

運(yùn)行效果

原理分析

首先,下面是頁面初始化的時候,,橙色滑塊的位置


鼠標(biāo)放到第二個tab上面,,大家可以看到,橙色滑塊就是向右偏移了一個tab的距離

鼠標(biāo)放到第三個tab上面,,大家可以看到,,橙色滑塊就是向右偏移了兩個tab的距離

如果從第一個tab到第六個tab的索引是0,1,2,3,4,5。

那么滑塊的公式就是(索引*tab的寬度),。大家看到有逐漸過去的效果,,其實(shí)是css3過渡( transition)的效果,。大家看下面的代碼就行了,一看就懂,!代碼如下:

vue方式
  1.    <!DOCTYPE html>

  2.    <html lang='en'>

  3.    <head>

  4.        <meta charset='UTF-8'>

  5.        <title>Title</title>

  6.    </head>

  7.    <link rel='stylesheet' href='reset.css'>

  8.    <style>

  9.        .nav{

  10.            margin: 40px;

  11.            position: relative;

  12.        }

  13.    .nav li{

  14.        float: left;

  15.        width: 100px;

  16.        height: 40px;

  17.        line-height: 40px;

  18.        color: #fff;

  19.        text-align: center;

  20.        background: #09f;

  21.        cursor: pointer;

  22.    }

  23.        .nav span{

  24.            position: relative;

  25.            z-index: 2;

  26.        }

  27.        .nav .slider{

  28.            position: absolute;

  29.            transition: all .5s cubic-bezier(0.4, -0.3, 0.57, 1.38);

  30.            width: 100px;

  31.            height: 40px;

  32.            background: #f90;

  33.            top: 0;

  34.            left: 0;

  35.            z-index: 1;

  36.        }

  37.    </style>

  38.    <body>

  39.    <div class='nav clear' id='nav' @mouseleave='nowIndex=0'>

  40.        <ul>

  41.            <li @mouseenter.stop='nowIndex=0'><span>Tab One</span></li>

  42.            <li @mouseenter.stop='nowIndex=1'><span>Tab Two</span></li>

  43.            <li @mouseenter.stop='nowIndex=2'><span>Tab Three</span></li>

  44.            <li @mouseenter.stop='nowIndex=3'><span>Tab four</span></li>

  45.            <li @mouseenter.stop='nowIndex=4'><span>Tab five</span></li>

  46.            <li @mouseenter.stop='nowIndex=5'><span>Tab six</span></li>

  47.        </ul>

  48.        <div class='slider' :style='{'transform':'translate3d(' nowIndex*100 'px,0,0)'}'></div>

  49.    </div>

  50.    </body>

  51.    <script src='vue.min.js'></script>

  52.    <script type='text/javascript'>

  53.       new Vue({

  54.           el:'#nav',

  55.           data:{

  56.               nowIndex:0

  57.           }

  58.       })

  59.    </script>

  60.    </html>

javascript方式
  1.    <!DOCTYPE html>

  2.    <html lang='en'>

  3.    <head>

  4.        <meta charset='UTF-8'>

  5.        <title>Title</title>

  6.    </head>

  7.    <link rel='stylesheet' href='reset.css'>

  8.    <style>

  9.        .nav{

  10.            position: relative;

  11.        }

  12.    .nav li{

  13.        float: left;

  14.        width: 100px;

  15.        height: 40px;

  16.        line-height: 40px;

  17.        color: #fff;

  18.        text-align: center;

  19.        background: #09f;

  20.        cursor: pointer;

  21.    }

  22.        .nav span{

  23.            position: relative;

  24.            z-index: 2;

  25.        }

  26.        .nav .slider{

  27.            position: absolute;

  28.            transition: all .5s cubic-bezier(0.4, -0.3, 0.57, 1.38);

  29.            width: 100px;

  30.            height: 40px;

  31.            background: #f90;

  32.            top: 0;

  33.            left: 0;

  34.            z-index: 1;

  35.        }

  36.    </style>

  37.    <body>

  38.    <div class='nav clear' id='nav'>

  39.        <ul>

  40.            <li><span>Tab One</span></li>

  41.            <li><span>Tab Two</span></li>

  42.            <li><span>Tab Three</span></li>

  43.            <li><span>Tab four</span></li>

  44.            <li><span>Tab five</span></li>

  45.            <li><span>Tab six</span></li>

  46.        </ul>

  47.        <div class='slider'></div>

  48.    </div>

  49.    </body>

  50.    <script type='text/javascript'>

  51.        var oDiv=document.querySelector('#nav'),oLi=oDiv.querySelectorAll('li'),oSlider=document.querySelector('.slider');

  52.        oDiv.addEventListener('mouseleave',function () {

  53.            oSlider.style.transform='translate3d(0,0,0)';

  54.        })

  55.        for(var i=0;i<oLi.length;i ){

  56.            oLi[i].index=i;

  57.            oLi[i].addEventListener('mouseenter',function (e) {

  58.                oSlider.style.transform='translate3d(' this.index*100 'px,0,0)';

  59.            })

  60.        }

  61.    </script>

  62.    </html>

4.輪播圖

運(yùn)行效果


原理分析

藍(lán)框的是li,,黑框的是div

初始化狀態(tài)

處于顯示第二張圖片的時候


看到上面,其實(shí)也就是控制ul的偏移量( transform:translate3d),。計算公式和上面的滑塊相似,,索引( 0|1|2|3)* li的寬度。不同的就是,,ul的偏移量是取負(fù)數(shù),,因?yàn)閡l是想左偏,上面的滑塊是向右偏,!

當(dāng)?shù)谝粡垐D片的時候,,ul偏移量設(shè)置( transform:translate3d(0px,0px,0px))。

當(dāng)?shù)诙垐D片的時候,,ul偏移量設(shè)置( transform:translate3d(-1000px,0px,0px)),。

當(dāng)?shù)诙垐D片的時候,ul偏移量設(shè)置( transform:translate3d(-2000px,0px,0px)),。以此類推,,偏移量很簡單的就能計算出來!

可能我說的大家有點(diǎn)懵,,但是,,看下面的代碼,就不會懵了,,因?yàn)榇a也很簡單,!

vue方
  1.    <!DOCTYPE html>

  2.    <html lang='en'>

  3.    <head>

  4.        <meta charset='UTF-8'>

  5.        <title>Title</title>

  6.        <link rel='stylesheet' href='reset.css'>

  7.        <style>

  8.            .slide-img {

  9.                width: 1000px;

  10.                height: 500px;

  11.                overflow: hidden;

  12.                position: relative;

  13.                margin: 20px auto;

  14.            }

  15.            ul {

  16.                transition: all .5s ease;

  17.            }

  18.            li {

  19.                float: left;

  20.            }

  21.            .slide-arrow div {

  22.                width: 50px;

  23.                height: 100px;

  24.                position: absolute;

  25.                margin: auto;

  26.                top: 0;

  27.                bottom: 0;

  28.                background: url('http://i1./1949/4d860a3067fab23b.jpg') no-repeat;

  29.            }

  30.            .arrow-right {

  31.                transform: rotate(180deg);

  32.                right: 0;

  33.            }

  34.            .arrow-left {

  35.                left: 0;

  36.            }

  37.            .slide-option{

  38.                position: absolute;

  39.                bottom: 10px;

  40.                width: 100%;

  41.                left: 0;

  42.                text-align: center;

  43.            }

  44.            .slide-option span{

  45.                display: inline-block;

  46.                width: 14px;

  47.                height: 14px;

  48.                border-radius: 100%;

  49.                background: #ccc;

  50.                margin: 0 10px;

  51.            }

  52.            .slide-option .active{

  53.                background: #09f;

  54.            }

  55.        </style>

  56.    </head>

  57.    <body>

  58.    <div class='slide-img clear' id='slide-img'>

  59.        <!--用tran這個class控制ul是否含有過渡效果,樣式已經(jīng)寫好-->

  60.        <ul :style='{'width':(listWidth*list.length) 'px','transform':'translate3d(-' (listWidth*nowIndex) 'px,0,0)'}'>

  61.            <!--遍歷出來的圖片-->

  62.            <li v-for='(li,index) in list' :style='{'width':listWidth 'px'}'>

  63.                <a href='javascript:;'>

  64.                    <img :src='li' class='slider-img'/>

  65.                </a>

  66.            </li>

  67.        </ul>

  68.        <div class='slide-option'>

  69.            <span v-for='(li,index) in list' :class='{'active':index===nowIndex}'></span>

  70.        </div>

  71.        <div class='slide-arrow'>

  72.            <div class='arrow-left' @click.stop='switchDo('reduce')'></div>

  73.            <div class='arrow-right' @click.stop='switchDo'></div>

  74.        </div>

  75.    </div>

  76.    </body>

  77.    <script src='vue.min.js'></script>

  78.    <script type='text/javascript'>

  79.        new Vue({

  80.            el: '#slide-img',

  81.            data: {

  82.                nowIndex: 0,

  83.                listWidth: '1000',

  84.                list: ['./images/timg1.jpg', './images/timg2.jpg', './images/timg3.jpg', './images/timg4.jpg'],

  85.                timer:null

  86.            },

  87.            methods: {

  88.                //滑動操作

  89.                switchDo(reduce){

  90.                    clearInterval(this.timer);

  91.                    //根據(jù)reduce判斷this.nowIndex的增加或者減少,!

  92.                    if(reduce==='reduce'){

  93.                        //如果是第一張,,就返回最后一張

  94.                        if(this.nowIndex===0){

  95.                            this.nowIndex=this.list.length-1;

  96.                        }

  97.                        else{

  98.                            this.nowIndex--;

  99.                        }

  100.                    }

  101.                    else{

  102.                        //如果是最后一張,就返回第一張

  103.                        if(this.nowIndex===this.list.length-1){

  104.                            this.nowIndex=0;

  105.                        }

  106.                        else{

  107.                            this.nowIndex ;

  108.                        }

  109.                    }

  110.                    var _this=this;

  111.                    this.timer=setInterval(function () {

  112.                        _this.switchDo();

  113.                    },4000)

  114.                },

  115.            },

  116.            mounted(){

  117.                var _this=this;

  118.                this.timer=setInterval(function () {

  119.                    _this.switchDo();

  120.                },4000)

  121.            }

  122.        })

  123.    </script>

  124.    </html>

javascript方式
  1.    <!DOCTYPE html>

  2.    <html lang='en'>

  3.    <head>

  4.        <meta charset='UTF-8'>

  5.        <title>Title</title>

  6.        <link rel='stylesheet' href='reset.css'>

  7.        <style>

  8.            .slide-img {

  9.                width: 1000px;

  10.                height: 500px;

  11.                overflow: hidden;

  12.                position: relative;

  13.                margin: 20px auto;

  14.            }

  15.            ul {

  16.                transition: all .5s ease;

  17.            }

  18.            li {

  19.                float: left;

  20.            }

  21.            .slide-arrow div {

  22.                width: 50px;

  23.                height: 100px;

  24.                position: absolute;

  25.                margin: auto;

  26.                top: 0;

  27.                bottom: 0;

  28.                background: url('http://i1./1949/4d860a3067fab23b.jpg') no-repeat;

  29.            }

  30.            .arrow-right {

  31.                transform: rotate(180deg);

  32.                right: 0;

  33.            }

  34.            .arrow-left {

  35.                left: 0;

  36.            }

  37.            .slide-option{

  38.                position: absolute;

  39.                bottom: 10px;

  40.                width: 100%;

  41.                left: 0;

  42.                text-align: center;

  43.            }

  44.            .slide-option span{

  45.                display: inline-block;

  46.                width: 14px;

  47.                height: 14px;

  48.                border-radius: 100%;

  49.                background: #ccc;

  50.                margin: 0 10px;

  51.            }

  52.            .slide-option .active{

  53.                background: #09f;

  54.            }

  55.        </style>

  56.    </head>

  57.    <body>

  58.    <div class='slide-img clear' id='slide-img'>

  59.        <!--用tran這個class控制ul是否含有過渡效果,,樣式已經(jīng)寫好-->

  60.        <ul id='slide-img-ul'>

  61.            <!--遍歷出來的圖片-->

  62.            <li style='width: 1000px;'><a href='javascript:;'><img src='images/timg1.jpg' class='slider-img'/></a></li>

  63.            <li style='width: 1000px;'><a href='javascript:;'><img src='images/timg2.jpg' class='slider-img'/></a></li>

  64.            <li style='width: 1000px;'><a href='javascript:;'><img src='images/timg3.jpg' class='slider-img'/></a></li>

  65.            <li style='width: 1000px;'><a href='javascript:;'><img src='images/timg4.jpg' class='slider-img'/></a></li>

  66.        </ul>

  67.        <div class='slide-option'>

  68.            <span></span>

  69.            <span></span>

  70.            <span></span>

  71.            <span></span>

  72.        </div>

  73.        <div class='slide-arrow'>

  74.            <div class='arrow-left'></div>

  75.            <div class='arrow-right'></div>

  76.        </div>

  77.    </div>

  78.    </body>

  79.    <script type='text/javascript'>

  80.        window.onload=function () {

  81.            var oUl=document.querySelector('#slide-img-ul');

  82.            var oLi=oUl.querySelectorAll('li');

  83.            var oSpan=document.querySelector('.slide-option').querySelectorAll('span');

  84.            var oArrowLeft=document.querySelector('.arrow-left');

  85.            var oArrowRight=document.querySelector('.arrow-right');

  86.            oUl.style.width='4000px';

  87.            oArrowLeft.addEventListener('click',function () {

  88.                switchDo('reduce');

  89.            })

  90.            oArrowRight.addEventListener('click',function () {

  91.                switchDo();

  92.            })

  93.            var timer=null,nowIndex=0;

  94.            function switchDo(reduce){

  95.                clearInterval(timer);

  96.                //設(shè)置樣式

  97.                oUl.style.transform='translate3d(-' (1000*nowIndex) 'px,0,0)';

  98.                for (var i=0;i<oSpan.length;i ){

  99.                    if(i===nowIndex){

  100.                        oSpan[i].className='active';

  101.                    }

  102.                    else{

  103.                        oSpan[i].className='';

  104.                    }

  105.                }

  106.                //根據(jù)reduce判斷this.nowIndex的增加或者減少,!

  107.                if(reduce==='reduce'){

  108.                    //如果是第一張,就返回最后一張

  109.                    if(nowIndex===0){

  110.                        nowIndex=oLi.length-1;

  111.                    }

  112.                    else{

  113.                        nowIndex--;

  114.                    }

  115.                }

  116.                else{

  117.                    //如果是最后一張,,就返回第一張

  118.                    if(nowIndex===oLi.length-1){

  119.                        nowIndex=0;

  120.                    }

  121.                    else{

  122.                        nowIndex ;

  123.                    }

  124.                }

  125.                timer=setInterval(function () {

  126.                    switchDo();

  127.                },4000)

  128.            }

  129.            switchDo();

  130.        }

  131.    </script>

  132.    </html>

5.小結(jié)

好了,關(guān)于 vue css3開發(fā)的特效,,以及和 javascript css3的對比,,就說到這里了,希望這三個小實(shí)例,,能幫到大家了解下應(yīng)該怎么使用 vue css3開發(fā)特效的,。今天講這三個小實(shí)例不是說給大家代碼,,讓大家復(fù)制粘貼使用,而是希望能起到一個拋磚引玉的作用,,拓展思維的作用,!就像我之前寫文章說得那樣,我寫文章是希望能起到一個授人以漁的作用,,而不是授人以魚,!最后,如果大家覺得有什么地方我寫錯了,,寫錯不好,,或者有其它什么建議,歡迎指出,!讓大家相互學(xué)習(xí),,共同進(jìn)步!


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多