动态颗粒背景,适合VUE、HTML前端显示

动态颗粒背景,适合做背景使用,VUE、HTML前端显示直接看效果
在这里插入图片描述
在这里插入图片描述

废话不多说直接上代码;

一、html 代码部分

<template>
  <div id="login">
    <div class="container">
      <div class="login-form">登录表单部分</div>
      <div class="lgBGimg">
        <div class="starBgc">
          <div class="star" v-for="(item,index) in starsCount" :key="index" ref="star"></div>
        </div>
      </div>
    </div>
    <div class="cavbg">
      <canvas id="spacebg"></canvas>
    </div>
  </div>
</template>

二、脚本部分

<script>
export default {
   
  setup() {
   
    return {
   
      starsCount:800,//数量
      distance:600,//间距
    };
  },

  mounted() {
   
    const starArr=this.$refs.star
    starArr.forEach(item=>{
   
      let speed = 0.2+(Math.random()*1)
      let distance = this.distance+(Math.random()*300)
      item.style.transformOrigin=`0 0 ${
     distance}px`
      item.style.transform=`translate3d(0,0,-${
     distance}px) rotateY(${
     (Math.random()*360)}deg) rotateX(${
     (Math.random()*-50)}deg) scale(${
     speed},${
     speed})`
    });

    window.requestAnimFrame = (function(){
   
      return  window.requestAnimationFrame
    })();
    let canvas = document.getElementById("spacebg");
    let ct2d = canvas.getContext("2d");

    let numStars = 1800;
    let radius = '0.'+Math.floor(Math.random() * 9) + 1  ;
    let focalLength = canvas.width *2;
    let warp = 0;
    let centerX;
    let centerY;
    let stars = [];
    let star;
    let i;
    let animate = true;

    initializeStars();
    function executeFrame(){
   
      if(animate)
        requestAnimFrame(executeFrame);
	      moveStars();
	      drawStars();
    }

    function initializeStars(){
   
      centerX = canvas.width / 2;
      centerY = canvas.height / 2;

      stars = [];
      for(i = 0; i < numStars; i++){
   
        star = {
   
          x: Math.random() * canvas.width,
          y: Math.random() * canvas.height,
          z: Math.random() * canvas.width,
          o: '0.'+Math.floor(Math.random() * 99) + 1
        };
        stars.push(star);
      }
    }

    function moveStars(){
   
      for(i = 0; i < numStars; i++){
   
        star = stars[i];
        star.z--;
        if(star.z <= 0){
   
          star.z = canvas.width;
        }
      }
    }

    function drawStars(){
   
      var pixelX, pixelY, pixelRadius;
      if(canvas.width != window.innerWidth || canvas.width != window.innerWidth){
   
        canvas.width = window.innerWidth;
        canvas.height = window.innerHeight;
        initializeStars();
      }

      window.onresize = () => {
   
        if(canvas.width != window.innerWidth || canvas.width != window.innerWidth){
   
          canvas.width = window.innerWidth;
          canvas.height = window.innerHeight;
          initializeStars();
        }
      }
      if(warp==0){
   
        ct2d.fillStyle = "rgba(0,10,20,1)";
        // let lineGradient = ct2d.createLinearGradient (100, 10, 100, 60);//第一张图效果
        let lineGradient = ct2d.createLinearGradient (500, 50, 100, 600);//第二张图效果
        lineGradient.addColorStop(0, '#083c6f');
        lineGradient.addColorStop(1, '#010516');
        ct2d.fillStyle = lineGradient;
        ct2d.fillRect(0,0, canvas.width, canvas.height);}
        ct2d.fillStyle = "rgba(209, 255, 255, "+radius+")";
      for(i = 0; i < numStars; i++){
   
        star = stars[i];
        pixelX = (star.x - centerX) * (focalLength / star.z);
        pixelX += centerX;
        pixelY = (star.y - centerY) * (focalLength / star.z);
        pixelY += centerY;
        pixelRadius = 1 * (focalLength / star.z);
        ct2d.fillRect(pixelX, pixelY, pixelRadius, pixelRadius);
        ct2d.fillStyle = "rgba(209, 255, 255, "+star.o+")";
      }
    }
    executeFrame();
  }
};
</script>

三、样式部分代码

<style lang="less">
#login {
   
  width: 100%;
  height: 100%;
  position: relative;
  overflow: hidden;
  .container{
   
    width: 100%;
    height: 100%;
    position: relative;
    &:before{
   
      position: absolute;
      width:100%;
      height:100%;
      background:url(../../common/assets/image/background.svg);
      background-size: cover;
      opacity:0.08;
      display: block;
      content: '';
      z-index:2;
    }
  }
  .desc {
   
    width: 100% !important;
    text-align: center !important;
    color: gray !important;
    height: 60px !important;
    line-height: 60px !important;
  }
  .cavbg{
   position:absolute; left:0; top:0; z-index:0;}

  .lgBGimg{
   
    position: absolute;
    top:0px;
    left:0px;
    right:0px;
    bottom:0px;
    width:100%;
    height:100%;
    z-index:1;

    .starBgc{
   
      position: absolute;
      left:48%;
      bottom: -99px;
      transform: perspective(500px);
      transform-style: preserve-3d;
      perspective-origin: 50% 100%;
      animation: rotate 90s infinite linear;
      opacity:0.75;
      .star{
   
        width: 2px;
        height: 2px;
        background: #f7f7b8;
        position: absolute;
        top: 0;
        left: 0;
        backface-visibility: hidden;
      }
      @keyframes rotate {
   
        0%{
   transform: perspective(400px) rotateZ(20deg) rotateX(-40deg) rotateY(0);}
        100%{
   transform: perspective(400px) rotateZ(20deg) rotateX(-40deg) rotateY(-360deg);}
      }
    }
  }
}
</style>

效果使用了3种,分别是GIF动效、CSS3动效、2DJS动效动态元素结合,开发而成的视频视频效果

搞完手工,最后给大家放上个视频看看效果吧,欢迎留言交了讨论一下吧

动态颗粒元素背景

相关推荐

  1. 前端moa gif json显示动画

    2024-02-05 13:10:01       53 阅读
  2. js动态几何背景

    2024-02-05 13:10:01       52 阅读
  3. CSS背景图像显示方式

    2024-02-05 13:10:01       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-05 13:10:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-05 13:10:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-05 13:10:01       87 阅读
  4. Python语言-面向对象

    2024-02-05 13:10:01       96 阅读

热门阅读

  1. 开源Vue UI框架

    2024-02-05 13:10:01       54 阅读
  2. 力扣292-Nim游戏

    2024-02-05 13:10:01       56 阅读
  3. 前端简历内容模板

    2024-02-05 13:10:01       48 阅读
  4. iframe通信,window.postMessage父子项目数据通信

    2024-02-05 13:10:01       55 阅读
  5. NLP自然语言处理

    2024-02-05 13:10:01       54 阅读
  6. c++获取逻辑执行的毫秒数

    2024-02-05 13:10:01       59 阅读
  7. k8s 部署 nocas 同时部署mysql

    2024-02-05 13:10:01       47 阅读
  8. MySQL深入——17(主备延迟)

    2024-02-05 13:10:01       55 阅读