首页 > 其他分享 >首屏图片展示

首屏图片展示

时间:2023-10-23 23:45:42浏览次数:32  
标签:const 展示 2px transform value 首屏 translate Math 图片

 

找到一个首页过度动画:

<template>
  <div ref="centerBg" class="centerBg">
    <!-- mask -->
    <div v-if="len" class="mask">
      <div class="grid" :style="{ gridTemplateColumns: `repeat(${col}, 1fr)` }">
        <div v-for="index in row * col" :key="index" class="col" :style="
            getCellStyle(
              Math.floor((index - 1) / col) + 1,
              ((index - 1) % col) + 1
            )
          " />
      </div>
    </div>
    <!-- title -->
    <div class="title" title="HI,CHEN">
      HI,CHEN
    </div>
  </div>
</template>

<script setup>
  import { onMounted,ref } from 'vue';
const centerBg = ref(null);
const row = ref(0);
const col = ref(0);
const len = ref(0);

// 定义网格样式
const getCellStyle = (rowIndex, colIndex) => {
  return {
    width: `${len.value}px`,
    transition: `opacity ${100 + Math.random() * 500}ms ${
      ((colIndex + rowIndex / 2) / 20) * Math.random() * 500
    }ms`
  };
};

// 初始化网格
const initGrid = () => {
  const imageWidth = window.innerWidth;
  const imageHeight = window.innerHeight;
  const maxGridCount =
    window.innerWidth > 1920
      ? 1000
      : window.innerWidth > 1080
      ? 600
      : window.innerWidth > 640
      ? 400
      : 100;
  len.value = Math.min(imageWidth, imageHeight) / Math.sqrt(maxGridCount);
  col.value = Math.ceil(imageWidth / len.value);
  row.value = Math.ceil(imageHeight / len.value);
};

// 图片加载完成后
const bgLoad = () => {
  const url = getComputedStyle(centerBg.value).getPropertyValue('--img');
  const urlMatch = url.match(/url\(['"]?([^'"]+)['"]?\)/)[1];
  const image = new Image();
  image.src = urlMatch;
  image.onload = () => {
    setTimeout(() => {
      centerBg.value.style.setProperty('--o', 0);
      setTimeout(() => {
        len.value = 0;
      }, 2000);
    }, 800);
  }
};

initGrid();

onMounted(() => {
  bgLoad();
});
</script>

<style>
  * {
    margin: 0;
    padding: 0;
  }

  .centerBg {
    --o: 1;
    --img: url('http://pic.616pic.com/bg_w1180/00/03/57/voXsmWh7He.jpg!/fw/1120');

    background: var(--img) center center/cover;
    height: 100vh;
    position: relative;
    display: flex;
    justify-content: center;
    align-items: center;
    overflow: hidden;

    /* css原生嵌套语法 */
    & .grid {
      display: grid;
    }

    & .col {
      background: white;
      opacity: var(--o);
      aspect-ratio: 1 / 1;
    }
  }

  .mask {
    position: absolute;
    inset: 0;
  }

  .title {
    filter: blur(10px);
    letter-spacing: -3rem;
    color: white;
    font-size: 3.75rem;
    font-weight: 800;
    line-height: 1;
    -webkit-text-stroke: 1px black;
    animation:
      glitch 1s 0.5s linear infinite,
      expand 1s forwards;
  }

  .title:before,
  .title:after {
    content: attr(title);
    position: absolute;
    left: 0;
  }

  .title:before {
    animation: glitchTop 1s 0.5s linear infinite;
    clip-path: polygon(0 0, 100% 0, 100% 33%, 0 33%);
  }

  .title:after {
    animation: glitchBotom 1.5s 0.5s linear infinite;
    clip-path: polygon(0 67%, 100% 67%, 100% 100%, 0 100%);
  }

  @keyframes expand {
    to {
      letter-spacing: 0.4rem;
      filter: blur(0px);
    }
  }

  @keyframes glitch {

    2%,
    64% {
      transform: translate(2px, 0) skew(0deg);
    }

    4%,
    60% {
      transform: translate(-2px, 0) skew(0deg);
    }

    62% {
      transform: translate(0, 0) skew(5deg);
    }
  }

  @keyframes glitchTop {

    2%,
    64% {
      transform: translate(2px, -2px);
    }

    4%,
    60% {
      transform: translate(-2px, 2px);
    }

    62% {
      transform: translate(13px, -1px) skew(-13deg);
    }
  }

  @keyframes glitchBotom {

    2%,
    64% {
      transform: translate(-2px, 0);
    }

    4%,
    60% {
      transform: translate(-2px, 0);
    }

    62% {
      transform: translate(-22px, 5px) skew(21deg);
    }
  }
</style>

 

标签:const,展示,2px,transform,value,首屏,translate,Math,图片
From: https://www.cnblogs.com/JJTyyds/p/17783769.html

相关文章

  • 使用Java语言 利用OpenCV,对两种图片相似度对比
    下边是代码部分importorg.opencv.core.*;importorg.opencv.imgcodecs.Imgcodecs;importorg.opencv.imgproc.Imgproc;importjava.io.*;importjava.net.URL;importjava.util.ArrayList;importjava.util.List;importorg.opencv.features2d.*;importorg.opencv.core.Mat......
  • SpringBoot上传图片到指定目录并回显
    一、概述案例:1.利用SpringBoot写一个后台2.接收前端传递过来的图片并保存到服务器。3.前端可以通过url访问上传过的图片步骤:1.写一个FileController专门用来接收前端提交的图片文件,并把图片保存到服务器的指定位置2.配置W......
  • 小程序修改富文本中图片行内样式
    //移除旧的样式   let html = data.goods_desc.replace(/<img[^>]*>/gi,  (match, capture)=> {        match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, '');                  retur......
  • 开源利器推荐:美团动态线程池框架的接入分享及效果展示
    一款美团动态线程池的框架DynamicTp终于开源了,接入简单,侵入性也不强,支持的接入方式也多,总体还是很不错的。我认为尤其适合中小企业SpringBoot应用接入,是一款线程池监控的利器。前言蛮早前有些过关于线程池的使用及参数的一些参考配置,有兴趣的可以翻看以前的博文,但终......
  • PowerBuilder读取硬盘图片显示出来并保存到数据库中
    PowerBuilder读取硬盘图片显示出来并保存到数据库中 数据库是SQLSERVER 表:blobtab 列: id,int,主键自增 blobdata,image,二进制内容可空 注:PB中存储二进制数据和读取二进制数据只能用updateblob语句和selectblob语句  显示图片到控件里的代码://显......
  • 图片与Base64互转
    ///<summary>///Base64转图片///</summary>///<paramname="data"></param>publicImageBase64ToImage(stringdata){data=data.Replace("data:image/png;base64,","").Replace("data:image/jgp;b......
  • 良心软件!视频、音频、图片、文档等各种格式转换,甚至屏幕录像都支持!
    良心软件!视频、音频、图片、文档甚至录屏都支持!主打一个免费多功能的多媒体文件转换工具引言 温馨提示:上面视频中有3D环绕背景音乐,请带上耳机效果更好它能干些什么?看它自己做的自我介绍,它都有哪些功能,可以做什么事情: “ 支持各种类型的最新视频格式、音频格式......
  • 信创办公--基于WPS的Word最佳实践系列(图片背景的删除)
    一、删除类型(1)类型一:图片本身的背景颜色模块比较多,背景比较复杂(2)类型二:图片的背景颜色是非常单一的,比方说都是白色或者都是黑色二、对应的删除方法对于类型一这种背景,我们可以直接采取图片工具当中的扣除背景这样的一个命令;这样WPS中内置的自动智能识别功能便会自动将图片抠图出来,......
  • 团队展示
    团队展示队员姓名与学号:许博文20211228(队长)旦增赤列20211223周翔20211205队名:三个诸葛亮队员风采:许博文:精明能干旦增赤列:勤奋好学周翔:严谨认真团队的首次合照: 团队的特色描述:又红又专......
  • 电子公文传输系统团队项目 团队展示
    电子公文传输系统团队项目团队展示一、团队建设队名:第一组队团队博客:diyizu团队宣言:拒绝熬夜,绝不脱发团队成员卢泽(组长)李严圣融路炎高端葛洺君胡卓越二、团队展示队员风采卢泽风格:实用主义擅长技术:C、Python编程兴趣:Python脚本希望的软工角色:只要不是前端......