美文网首页Vue效果AnimeJs
Anime+Vue<简单的雨滴打窗效果>

Anime+Vue<简单的雨滴打窗效果>

作者: 誰在花里胡哨 | 来源:发表于2020-03-04 13:26 被阅读0次
效果图:
raindrop.gif

🎈大佬永远是大佬,总是无法超越,此篇文章是参考以下地址效果,进行实现(这里基本是用的css+html较多,大佬的肯定牵扯到 canvas js等复杂内容 )

image.png
🎈参考地址:https://www.jq22.com/jquery-info4697
注意:下载下来是无法使用的

🎈因为源码下载下来有问题,而且还被加密了,所以无法深入学习,只能顺藤摸瓜,先试着百度,百度上有如何教你怎么实现简单的雨滴效果,简单的来说就是:
1. 背景一张图片;
2. 雨滴一样的标签;
3. 雨滴标签里装一张倒过来的图片;
4. 创建很多标签,然后进行动画效果。

image.png
🎈单纯想看实现原理的,可以 点击参考这篇文章 或者看下面简单的 css+html 代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        body {
            overflow: hidden;
        }

        #bck_img {
            width: 100%;
            height: 100%;
            position: absolute;
            transform: scale(1.1);
            filter: blur(10px);
            z-index: -1;
        }
        .raindrop{
            filter: blur(1px);
            opacity: 0.7;
            background: transparent;
            position: absolute;
            top: 0%;
            left: 50%;
            width: 30px;
            height: 40px;
            border-radius: 100%;
            transform: rotate(180deg) scale(0.8) translateY(200px);
            background-image: url('./img/wallhaven-wyrqg7.png');
            background-size: 100% 100%;
            box-shadow:0 0 2px rgba(83, 83, 83, 0.596);
            animation: raindropMove 10s ease infinite;
        }
        @keyframes raindropMove {
            100%{
                transform: rotate(180deg) translateY(-1000px) scale(0.8);
            }
        }
    </style>
</head>

<body>
    <img id="bck_img" src="./img/wallhaven-wyrqg7.png" alt="">
    <div class="raindrop"></div>
</body>

</html>

🎈使用anime.js+vue主要是为了方便创造更多的雨点和实现动画,此代码并没有做过多解释,因为感觉距离自己的理想效果还差很远,我也会在日后对canvas的学习中,去努力实现更好的效果,所以有简单需要的可以直接使用

代码如下:
<template>
  <div class="body">
    <img id="bck_img" src="@/assets/img/bck3.jpg" alt />
    <div class="raindrop_box">
      <div
        class="raindrop"
        v-for="(i,index) in 200"
        :key="index"
        :style="`top:${random(0,window_h)}px;left:${random(0,window_w)}px;;`"
      >
        <img src="@/assets/img/bck3.jpg" alt />
      </div>
    </div>
    <svg style="width: 0; height: 0;">
      <defs>
        <filter id="shadowed-goo">
          <feGaussianBlur in="SourceGraphic" result="blur" stdDeviation="10" />
          <feColorMatrix
            in="blur"
            mode="matrix"
            values="1 0 0 0 0  0 1 0 0 0  0 0 1 0 0  0 0 0 18 -7"
            result="goo"
          />
          <feGaussianBlur in="goo" stdDeviation="3" result="shadow" />
          <feColorMatrix
            in="shadow"
            mode="matrix"
            values="0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 1 -0.2"
            result="shadow"
          />
          <feOffset in="shadow" dx="1" dy="1" result="shadow" />
          <feBlend in2="shadow" in="goo" result="goo" />
          <feBlend in2="goo" in="SourceGraphic" result="mix" />
        </filter>
      </defs>
    </svg>
  </div>
</template>

<script>
import anime from "animejs/lib/anime.es.js";
export default {
  data() {
    return {
      window_w: window.innerWidth,
      window_h: window.innerHeight
    };
  },
  methods: {
    random(min, max) {
      return Math.floor(Math.random() * (max - min) + min);
    }
  },
  mounted() {
    let _this = this;
    console.log(_this.window_h);
    let raindrops = document.querySelectorAll(".raindrop");
    anime({
      targets: ".raindrop",
      scale: function(el, i, l) {
        return anime.random(1, 5) * 0.1;
      },
      duration: 0,
      complete: function(params) {
        for (let i = 0; i < raindrops.length; i++) {
          anime({
            targets: raindrops[i],
            delay: i * -100,
            easing: "easeInOutExpo",
            translateY: _this.window_h,
            duration: 7000,
            loop: true
          });
        }
      }
    });
  }
};
</script>

<style lang="scss" scoped>
.body {
  position: absolute;
  width: 100%;
  height: 100%;
  overflow: hidden;
  #bck_img {
    position: absolute;
    left: 0;
    width: 100%;
    height: 100%;
    filter: blur(10px);
    transform: scale(1.1);
    z-index: -1;
  }
  .raindrop_box {
    filter: url("#shadowed-goo");
    position: absolute;
    width: 100%;
    height: 100%;
    overflow: hidden;
    .raindrop {
      position: absolute;
      width: 30px;
      height: 40px;
      border-radius: 100%;
      overflow: hidden;
      filter: blur(1px);
      img {
        width: 100%;
        height: 100%;
        transform: scaleY(-1);
      }
    }
  }
}
</style>

相关文章

  • Anime+Vue<简单的雨滴打窗效果>

    效果图: ?大佬永远是大佬,总是无法超越,此篇文章是参考以下地址效果,进行实现(这里基本是用的css+html较多...

  • web前端入门到实战:CSS实现雨滴动画效果

    玻璃窗 今天我们要实现的是雨滴效果,不过实现雨滴前,我们先把毛玻璃的效果弄出来,没有玻璃窗,雨都进屋了,还有啥好敲...

  • 雨滴窗

    只记得一个萧瑟的季节 回忆在延续着不过终结 当在灯泡下的身影憧憬 那时候可否彼此再得相恋 只记得雨在敲打点碎音 看...

  • Anime+Vue<极光效果>

    效果图: 想用 实现此效果的(代码看起来不是很简洁),可参考地址 代码如下:

  • Anime+Vue<小人奔跑效果>

    效果图: 这种效果纯css也是可以实现的,点这里就能看到纯css写的 ?但是用animejs你会发现方便很多,下面...

  • 雨滴叩窗

    丝丝缕缕的雨粒叩着夜幕下的窗。 雨夜中,会不会有人因雨滴飘落而心情忧伤,会不会有人因雨滴飘舞而...

  • ps雨滴效果

    1.打开ps。 2.拉入风景照片。 3.对照片进行复制一份:ctrl+j。 4.画一个椭圆选取,做地面潮湿效果。 ...

  • Anime+Vue

    效果图: 参考效果地址: 代码如下:

  • 昨夜,雨滴叩窗

    在雨幕弥漫的天气,唯有音乐和文字在茶香四溢中,一起启航。 轻轻地把日间所有的喧嚣与浮躁置放于屋外,只是真实的和自己...

  • 十月告诉我

    寒风摇曳我的窗, 对我说, 天冷了, 照顾好自己。 落叶飘进我的书页, 对我说, 好好珍惜, 绿叶和红花。 雨滴打...

网友评论

    本文标题:Anime+Vue<简单的雨滴打窗效果>

    本文链接:https://www.haomeiwen.com/subject/coamlhtx.html