vue和css3交互特效实现方法

本文主要介绍了详解vue+css3做交互特效的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。

1.前言

做项目就难免会开发交互效果或者特效,而我最近开发的项目一直在使用vue,开发技术栈方面,理所当然就使用了vue+css3开发,过程中发现使用vue+css3开发特效,和javascript/jquery+css3的思维方式不一样,但是比javascript/jquery+css3简单一点点。今天就分享三个简单的小实例,希望能起到拓展思维的作用,让大家明白vue+css3应该怎样开发交互效果!如果大家有什么好的建议,或者觉得我哪里写错了,欢迎指出!

1.文章上面的代码,虽然代码很简单,不难理解,但是也是建议大家边写边看,这样不会混乱。
2.文章所提及的小实例,都是很基础的,大家可以参照自己的想法进行扩展,或者修改,可能会有意想不到的效果。我写这类型的文章也是想授人以渔,不是授人以鱼!
3.这几个实例,摘自我自己的平常练习的项目,代码已经提到github上面了(vue-demos)。欢迎大家star。

2.开场小动画运行效果

立即学习“前端免费学习笔记(深入)”;

gif图模糊效果看着跟实际效果不太一样!大家注意!

vue和css3交互特效实现方法

原理分析

说到原理分析,其实也没什么可以分析的,就是在页面是下面这个状态的时候,把文字替换掉。至于看到字体缩成一团,就是letter-spacing这个css属性的控制效果。字体模糊就是filter: blur()这个css属性的控制效果!看到有逐渐的变化,就是css3动画(animation)的效果

vue和css3交互特效实现方法

下面简单分析下,这个动画的几个步骤,从下面看到,这个动画一共8个步骤。

vue和css3交互特效实现方法

这下就清晰明了了,我们要在下图这个瞬间开始改变文字,也就是页面加载了两秒后,动画执行了两次后就开始改变文字。然后每隔两秒改变一次文字,直到最后!

vue和css3交互特效实现方法

下面给出vue和javascript两种方式的代码,看下哪种方式更加的简单!

vue方式

nbsp;html>    Title  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);    }  }

  

{{testText}}

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) } })

登录后复制

javascript方式

nbsp;html>    Title  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);    }  }

  

欢迎浏览

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)

登录后复制

3.导航滑块运行效果

vue和css3交互特效实现方法

原理分析

首先,下面是页面初始化的时候,橙色滑块的位置

vue和css3交互特效实现方法

鼠标放到第二个tab上面,大家可以看到,橙色滑块就是向右偏移了一个tab的距离

vue和css3交互特效实现方法

鼠标放到第三个tab上面,大家可以看到,橙色滑块就是向右偏移了两个tab的距离

vue和css3交互特效实现方法

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

那么滑块的公式就是(索引*tab的宽度)。大家看到有逐渐过去的效果,其实是css3过渡(transition)的效果。大家看下面的代码就行了,一看就懂!代码如下:

vue方式

nbsp;html>    Title  .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;  }

  

登录后复制    Tab One    Tab Two    Tab Three    Tab four    Tab five    Tab six    

new Vue({ el:'#nav', data:{ nowIndex:0 } })

javascript方式

nbsp;html>    Title  .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;  }

  

登录后复制    Tab One    Tab Two    Tab Three    Tab four    Tab five    Tab six    

var op=document.querySelector(“#nav”),oLi=op.querySelectorAll(“li”),oSlider=document.querySelector(“.slider”); op.addEventListener(“mouseleave”,function () { oSlider.style.transform='translate3d(0,0,0)'; }) for(var i=0;i<oLi.length;i++){ oLi[i].index=i; oLi[i].addEventListener("mouseenter",function (e) { oSlider.style.transform='translate3d('+this.index*100+'px,0,0)'; }) }

4.轮播图运行效果

vue和css3交互特效实现方法

原理分析

蓝框的是li,黑框的是p

初始化状态

vue和css3交互特效实现方法

处于显示第二张图片的时候

vue和css3交互特效实现方法

看到上面,其实也就是控制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方式

nbsp;html>    Title        .slide-img {      width: 1000px;      height: 500px;      overflow: hidden;      position: relative;      margin: 20px auto;    }    ul {      transition: all .5s ease;    }    li {      float: left;    }    .slide-arrow p {      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;    }  

    

登录后复制登录后复制                      @@##@@              

      

  

    

    

   new Vue({ el: '#slide-img', data: { nowIndex: 0, listWidth: '1000', list: ['./images/timg1.jpg', './images/timg2.jpg', './images/timg3.jpg', './images/timg4.jpg'], timer:null }, methods: { //滑动操作 switchDo(reduce){ clearInterval(this.timer); //根据reduce判断this.nowIndex的增加或者减少! if(reduce==='reduce'){ //如果是第一张,就返回最后一张 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) } })

javascript方式

nbsp;html>    Title        .slide-img {      width: 1000px;      height: 500px;      overflow: hidden;      position: relative;      margin: 20px auto;    }    ul {      transition: all .5s ease;    }    li {      float: left;    }    .slide-arrow p {      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;    }  

    

登录后复制登录后复制        @@##@@    @@##@@    @@##@@    @@##@@    

                  

  

    

    

   window.onload=function () { var oUl=document.querySelector('#slide-img-ul'); var oLi=oUl.querySelectorAll('li'); var oSpan=document.querySelector('.slide-option').querySelectorAll('span'); var oArrowLeft=document.querySelector('.arrow-left'); var oArrowRight=document.querySelector('.arrow-right'); oUl.style.width='4000px'; oArrowLeft.addEventListener('click',function () { switchDo('reduce'); }) oArrowRight.addEventListener('click',function () { switchDo(); }) var timer=null,nowIndex=0; function switchDo(reduce){ clearInterval(timer); //设置样式 oUl.style.transform='translate3d(-'+(1000*nowIndex)+'px,0,0)'; for (var i=0;i<oSpan.length;i++){ if(i===nowIndex){ oSpan[i].className='active'; } else{ oSpan[i].className=''; } } //根据reduce判断this.nowIndex的增加或者减少! if(reduce==='reduce'){ //如果是第一张,就返回最后一张 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(); }

5.小结

好了,关于vue+css3开发的特效,以及和javascript+css3的对比,就说到这里了,希望这三个小实例,能帮到大家了解下应该怎么使用vue+css3开发特效的。今天讲这三个小实例不是说给大家代码,让大家复制粘贴使用,而是希望能起到一个抛砖引玉的作用,拓展思维的作用!

相关推荐:

详解vue、css3如何实现交互特效

详解vue、css3如何实现交互特效

详解vue、css3如何实现交互特效

vue和css3交互特效实现方法vue和css3交互特效实现方法vue和css3交互特效实现方法vue和css3交互特效实现方法vue和css3交互特效实现方法

以上就是vue和css3交互特效实现方法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2790918.html

(0)
上一篇 2025年3月8日 19:03:11
下一篇 2025年3月1日 11:51:46

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JS和CSS网页加载中的动画效果实现方法

    本文主要为大家详细介绍了js+css实现网页加载中的动画效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家。 本文实例为大家分享了JS实现网页加载中效果的具体代码,供大家参考,具体内容如下 需要材料: 一张loadin…

    2025年3月8日
    200
  • vue引入公共css文件的简单实现方法

    本文主要为大家分享一篇vue 引入公共css文件的简单方法(推荐),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧,希望能帮助到大家。 如果不想把css写在单文件组件里如这样: home document about exp…

    编程技术 2025年3月8日
    200
  • vue引入css,less遇到的坑和解决方法实例分享

    在使用vux开发手机页面时,引入vux的公共样式less一直报错,通过各种百度,google都没有解决,走了很多弯路。最后才发现钻牛角尖了,可以换一种方法引入。本文主要为大家分享一篇浅谈vue引入css,less遇到的坑和解决方法,具有很好…

    编程技术 2025年3月8日
    200
  • Vue-cli引入第三方JS和CSS方法详解

    本文主要为大家分享一篇vue cli 引入第三方js和css的常用方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧,希望能帮助到到大家。 第一种方法: 直接在index.html中引入 js 登录后复制 css 立即学习…

    编程技术 2025年3月8日
    200
  • CSS nth-child与nth-of-type的元素查找方式详解

    nth-child和nth-of-type是css的两个伪选择符。应用中,这两者常常容易混淆。这里把它们拿出来仔细做个对比,看看这两者是怎么查找元素的。本文主要介绍了详解css nth-child与nth-of-type的元素查找方式的相关…

    2025年3月8日
    200
  • vue中配置mint-ui报css错误如何解决

    在vue2.0中引入了mint-ui后总是报一个css的错误,本文主要介绍了vue中配置mint-ui报css错误问题的解决方法,非常具有实用价值,需要的朋友可以参考下,希望能帮助到大家。 但是package.json中已经配置了css-l…

    2025年3月8日 编程技术
    200
  • JavaScript+CSS相册特效实例代码

    下面小编就为大家带来一篇javascript+css相册特效实例代码。小编觉得挺不错的,现在就分享javascript+css的源码给大家,也给大家做个参考。对javascript和css制作相册感兴趣一起跟随小编过来看看吧 嗯 就是这样一…

    2025年3月8日 编程技术
    200
  • js和css标签内容切换功能的实现教程

    本文主要和大家分享js + css实现标签内容切换功能(实例讲解)。我们先附上效果图,并用实例代码教大家,希望能帮助到大家。 先附上效果图和代码: html 文档: nbsp;html>  Title   window.onload …

    2025年3月8日
    200
  • 详解在Vue中有条件地使用CSS类

    本文主要介绍了详解在vue中有条件地使用css类,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 很多时候Web在运行时要更改元素的CSS类名。但是在改变类名时,有时最好是有条件地应用样式。例…

    2025年3月8日
    200
  • 如何在Vue中有条件地使用CSS类

    很多时候web在运行时要更改元素的css类名。但是在改变类名时,有时最好是有条件地应用样式。例如你有一个翻页的效果。翻页效果通常有一个高亮的效果,用于向用户显示当前页,这对于用户而言是很有帮助的。该项目的样式是有条件设置的,基于当前正在查看…

    2025年3月8日
    200

发表回复

登录后才能评论