Vue<文字探照灯效果>

效果图:

move.gif

此篇文章用到了 SVG + TweenLite + clip-path 主要知识点,不明白 TweenLite 的话可以查看之前的文章~~ 👌

若出现报错问题,请下载老版本的gsap

 "gsap": "^2.1.3",
代码如下:
<template>
  <div class="overall">
    <div class="text-box">
      <span class="dot"></span>
      <span class="dot"></span>
      <span class="dot"></span>
    </div>
    <svg height="0" width="0">
      <defs>
        <clipPath id="svgTextPath">
          <!-- textLength 文字的长度 此处对应容器的宽度  x y 为横纵坐标位置 -->
          <text x="0" y="180" textLength="700px">learning</text>
          <text x="200" y="300" textLength="250px">vue</text>
        </clipPath>
      </defs>
    </svg>
  </div>
</template>

<script>
import { TweenLite } from "gsap";
export default {
  mounted() {
    this.move();
  },
  methods: {
    move() {
      let box = document.querySelector(".text-box");
      let dt = document.querySelectorAll(".dot");
      window.addEventListener("mousemove", function(e) {
        for (let i = 0; i < dt.length; i++) {
          //圆灯相对于 容器的坐标位置
          let x = e.pageX - box.offsetLeft - dt[i].offsetWidth / 2;
          let y = e.pageY - box.offsetTop - dt[i].offsetHeight / 2;
          TweenLite.to(dt[i], i + 0.2, {
            x: x,
            y: y,
            ease: Back.easeOut.config(1.7)
          });
        }
      });
    }
  }
};
</script>

<style lang="scss" scoped>
.text-box {
  width: 700px;
  height: 400px;
  font-size: 4rem;
  font-weight: bold;
  text-transform: uppercase;
  position: relative;
  overflow: hidden;
  //引入剪切路径
  clip-path: url(#svgTextPath);
  color: white;
  background: #2fddc6;
  //移动圆灯的样式
  .dot {
    display: inline-block;
    border-radius: 50%;
    position: absolute;
    left: 0;
    top: 0;
    opacity: 0.9;
  }
  .dot:nth-child(1) {
    width: 350px;
    height: 350px;
    background: rgb(30, 207, 148);
    z-index: 8;
    transform: translateX(-175px) translateY(-175px);
  }
  .dot:nth-child(2) {
    width: 500px;
    height: 500px;
    background: rgb(28, 204, 195);
    z-index: 7;
    transform: translateX(-250px) translateY(-250px);
  }
  .dot:nth-child(3) {
    width: 700px;
    height: 700px;
    background: rgb(18, 155, 247);
    z-index: 6;
    transform: translateX(-350px) translateY(-350px);
  }
}
//剪切文字的文字样式 此处的文字颜色取背景色
text {
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen,
    Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
  font-weight: bold;
  font-size: 8rem;
  text-transform: uppercase;
}
</style>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 文字图层制作步骤: (1)新建合成:高度1000*宽度800(也可根据自己需要设置),时长原来是10秒,后来我改成...
    蜕变chen阅读 5,938评论 0 3
  • 前言 Hexo安装过后,默认的主题是landscape,如果不喜欢,我们也可以进行更换。本文主要讲解NexT主题的...
    WenBo丨星空灬阅读 48,683评论 10 93
  • 【Android 动画】 动画分类补间动画(Tween动画)帧动画(Frame 动画)属性动画(Property ...
    Rtia阅读 11,391评论 1 38
  • 今天来到石家庄, 眼睛医院走一趟。 这个酒店真是棒, 真的像公寓一样。 乘坐飞机游天上, 明天气温打特价 我的心情...
    娄小潇阅读 1,630评论 0 1
  • 人啊,就怕想的过分 尤其是在能力不足的时候偏偏却 想的太完美 想的太多 想的自己不该想的 最后也会变成空罢了 所以...
    哥安忒阅读 1,162评论 0 1

友情链接更多精彩内容