【大前端vue:组件】鼠标上移 出现动画

news2024/12/18 10:48:17

【大前端vue:组件】鼠标上移 出现动画

在这里插入图片描述

<template>
  <div class="view-introduction-culture">
    <div class="culture-wrapper">
      <h2 class="culture-title">鼠标上移:展示动画 显示出来</h2>
      <div class="culture-content">
        <div v-for="(item, index) in cultureList" :key="index" class="culture-item"
          @mouseenter="handleMouseEnter(index)" @mouseleave="handleMouseLeave(index)">
          <!-- 背景图片层 -->
          <div class="item-bg" :style="{ backgroundImage: `url(${item.bgImage})` }">
            <div class="item-number">{{ item.number }}</div>
            <div class="item-name">{{ item.name }}</div>
            <div class="item-icon">
              <img :src="item.icon" :alt="item.name">
            </div>
          </div>

          <!-- 悬浮展示层 -->
          <div class="hover-content" :class="{ active: activeIndex === index }">
            <div class="hover-text">{{ item.description }}</div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: 'CultureIndex',
  data() {
    return {
      activeIndex: null, // 当前激活的索引
      hoverTimer: null, // 用于存储定时器
      cultureList: [
        {
          number: '01',
          name: '标签1',
          icon: '/icons/culture-1.png',
          bgImage: '/images/culture-bg-1.jpg',
          description: '标签描述文字'
        },
        {
          number: '02',
          name: '标签2',
          icon: '/icons/culture-2.png',
          bgImage: '/images/culture-bg-2.jpg',
          description: '标签描述文字'
        },
        {
          number: '03',
          name: '标签3',
          icon: '/icons/culture-3.png',
          bgImage: '/images/culture-bg-3.jpg',
          description: '标签描述文字'
        },
        {
          number: '04',
          name: '标签4',
          icon: '/icons/culture-4.png',
          bgImage: '/images/culture-bg-4.jpg',
          description: '标签4描述文字'
        }
      ]
    }
  },
  methods: {
    handleMouseEnter(index) {
      // 清除之前的定时器
      if (this.hoverTimer) {
        clearTimeout(this.hoverTimer)
      }
      // 设置新的定时器
      this.hoverTimer = setTimeout(() => {
        this.activeIndex = index
      }, 300)
    },
    handleMouseLeave(index) {
      // 清除定时器
      if (this.hoverTimer) {
        clearTimeout(this.hoverTimer)
        this.hoverTimer = null
      }
      // 只有当前激活的项目是当前离开的项目时,才清除激活状态
      if (this.activeIndex === index) {
        this.activeIndex = null
      }
    }
  },
  // 组件销毁时清理定时器
  beforeDestroy() {
    if (this.hoverTimer) {
      clearTimeout(this.hoverTimer)
    }
  }
}
</script>

<style lang="scss">.view-introduction-culture {
  width: 100%;
  background: {
    image: url('@/assets/image/introduction/bg.png') no-repeat center center;
    size: 100% 100%;
    color: #F1F6FF;
  }
  padding: 70px 0;

  .culture-wrapper {
    width: 1200px;
    margin: 0 auto;
  }

  .culture-title {
    text-align: center;
    font-size: 28px;
    color: #333;
    margin-bottom: 51px;
  }

  .culture-content {
    display: flex;
    justify-content: space-between;
  }

  .culture-item {
    position: relative;
    width: 302px;
    height: 300px;
    overflow: hidden;
    cursor: pointer;

    .item-bg {
      width: 100%;
      height: 100%;
      background: {
        size: cover;
        position: center;
      }
      position: relative;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      color: #fff;
      padding: 20px;

      &::after {
        content: '';
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        background: linear-gradient(to bottom, rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.6));
      }
    }

    .item-number,
    .item-name,
    .item-icon {
      position: relative;
      z-index: 1;
    }

    .item-number {
      font-size: 36px;
      font-weight: bold;
      margin-bottom: 10px;
    }

    .item-name {
      font-size: 24px;
      margin: 10px 0;
    }

    .item-icon {
      margin-top: 20px;

      img {
        width: 40px;
        height: 40px;
      }
    }

    .hover-content {
      position: absolute;
      top: 0;
      left: 0;
      width: 302px;
      height: 500px;
      background: pink;
      opacity: 0;
      display: flex;
      align-items: center;
      justify-content: center;
      transition: opacity 0.1s ease;
      padding: 30px;
      pointer-events: none; // 防止悬浮层影响鼠标事件

      &.active {
        opacity: 0.8;
      }

      .hover-text {
        color: #fff;
        font-size: 16px;
        line-height: 1.8;
        text-align: center;
      }
    }
  }
}
</style>

</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2261549.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决电脑网速慢问题:硬件检查与软件设置指南

电脑网速慢是许多用户在使用过程中常见的问题&#xff0c;它不仅会降低工作效率&#xff0c;还可能影响娱乐体验。导致电脑网速慢的原因多种多样&#xff0c;包括硬件问题、软件设置和网络环境等。本文将从不同角度分析这些原因&#xff0c;并提供提高电脑网速的方法。 一、检查…

快速本地化部署 OnlyOffice服务 ( Linux+Docker)

文章目录 一、OnlyOffice介绍&#x1f4d6;二、集成OnlyOffice&#x1f9e9;2.1 环境准备&#x1f5a5;️2.2 搜索镜像2.3 拉取镜像2.4 查看镜像2.5 创建容器2.6 进入容器配置2.7 重启服务2.8 添加字体字号2.9 测试OnlyOffice服务 三、在线预览office文档四、Cpolar内网穿透 一…

Leecode刷题C++之形成目标字符串需要的最少字符串数①

执行结果:通过 执行用时和内存消耗如下&#xff1a; 代码如下&#xff1a; class Solution { public:int minValidStrings(vector<string>& words, string target) {auto prefix_function [](const string& word, const string& target) -> vector<…

51c嵌入式~合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/11529950 一、不同的电平信号的MCU怎么通信 “电平转换”电路 ​ 先说一说这个电路的用途&#xff1a;当两个MCU在不同的工作电压下工作&#xff08;如MCU1 工作电压5V&#xff1b;MCU2 工作电压3.3V&#xff09;&#xf…

2024年第十五届蓝桥杯青少组C++国赛—割点

割点 题目描述 一张棋盘由n行 m 列的网格矩阵组成&#xff0c;每个网格中最多放一颗棋子。当前棋盘上已有若干棋子。所有水平方向或竖直方向上相邻的棋子属于同一连通块。 现给定棋盘上所有棋子的位置&#xff0c;如果要使棋盘上出现两个及以上的棋子连通块&#xff0c;请问…

Java线程池解读

Java 线程池是一个提供多线程管理和调度的工具&#xff0c;通常用来处理多个并发任务。线程池能够帮助有效管理线程的创建、调度、执行和销毁&#xff0c;避免频繁的线程创建和销毁&#xff0c;提高系统性能。 前言 Java 线程池是面试中的常客&#xff0c;面试官经常会问线程…

如何为IntelliJ IDEA配置JVM参数

在使用IntelliJ IDEA进行Java开发时&#xff0c;合理配置JVM参数对于优化项目性能和资源管理至关重要。IntelliJ IDEA提供了两种方便的方式来设置JVM参数&#xff0c;以确保你的应用程序能够在最佳状态下运行。本文将详细介绍这两种方法&#xff1a;通过工具栏编辑配置和通过服…

【CC2530开发基础篇】继电器模块使用

一、前言 1.1 开发背景 本实验通过使用CC2530单片机控制继电器的吸合与断开&#xff0c;深入了解单片机GPIO的配置与应用。继电器作为一种常见的电气控制元件&#xff0c;广泛用于自动化系统中&#xff0c;用于控制大功率负载的开关操作。在本实验中&#xff0c;将通过GPIO口…

通过解调使用正则化相位跟踪技术进行相位解包裹

1. 绪论 光学计量学通常使用光学干涉仪来测量各种物理量。1,2 根据应用的不同&#xff0c;可以使用多种类型的干涉仪&#xff0c;但它们的共同目标是产生一个由被测物理量调制的条纹图案。使用这种光束编码程序可以检测到的物理量范围非常广&#xff1a;深度测量、应变分析、温…

数字图像处理技术期末复习

1. 已知图像的分辨率和深度&#xff0c;怎么求图像的存储空间&#xff08;位&#xff0c;字节&#xff0c;KB&#xff09;&#xff1f; 题目&#xff1a; 已知图像的分辨率和深度&#xff0c;怎么求图像的存储空间&#xff08;位&#xff0c;字节&#xff0c;KB&#xff09;&a…

Elasticsearch 架构及 Lucene 索引结构原理入门

文章目录 Elasticsearch 整体架构Lucene 索引结构Lucene 倒排索引核心原理倒排索引倒排表&#xff08;Posting List&#xff09; Elasticsearch 整体架构 一个 ES Index 在集群模式下&#xff0c;有多个Node&#xff08;节点&#xff09;组成&#xff0c;每个节点就是ES的 inst…

人脸检测的若干思考!!!

1.目前主要有人脸检测方法分类&#xff1f; 主要包含两类&#xff1a;传统人脸检测算法和基于深度学习的人脸检测算法。 传统人脸检测算法主要可以分为4类&#xff1a; 基于知识、模型、特征和外观的人脸检测方法&#xff1b; 基于深度学习的方法&#xff1a;基于级联CNN的人脸…

突破时间与空间限制的富媒体百宝箱——智能工具箱:让云上内容生产更easy

“这是你的同款日常吗&#xff1f;老是在赶deadline&#xff0c;苦练PS还未出师&#xff0c;premiere、达芬奇真的好难&#xff0c;学python脑容量确实不够~打工人太难了~~” 来试试智能工具箱吧&#xff01;即来即用&#xff0c;一键实现办公自由。图片工具、视频工具、音频工…

el-table打印PDF预览,表头错位的解决方案

文章目录 背景与需求需求分析解决方案方案一&#xff1a;vue-print-nb插件安装引入使用 方案二安装使用 方案三 总结 背景与需求 本例以vue2项目为例&#xff0c;vue3与react等同理。 有个项目需要打印的功能&#xff0c;网页使用vue2写的&#xff0c;主体内容为表格el-table&a…

【算法day16】二叉树:搜索二叉树的修剪与构建

题目引用 修剪二叉搜索树将有序数组转换为二叉搜索树把二叉搜索树转换为累加树 1. 修剪二叉搜索树 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树&#xff0c;使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在…

java中File类

1、介绍 File类定义了一些与平台无关的方法来操作文件&#xff0c;可以通过调用File类中的方法&#xff0c;实现创建、删除、重命名文件等操作。File类的对象主要用来获取文件本身的一些信息&#xff0c;如文件所在的目录、文件长度、文件读写权限等。数据流可以将数据写入到文…

金碟中间件-AAS-V10.0安装

金蝶中间件AAS-V10.0 AAS-V10.0安装 1.解压AAS-v10.0安装包 unzip AAS-V10.zip2.更新license.xml cd /root/ApusicAS/aas# 这里要将license复制到该路径 [rootvdb1 aas]# ls bin docs jmods lib modules templates config domains …

易语言OCR证件照文字识别

一.引言 文字识别&#xff0c;也称为光学字符识别&#xff08;Optical Character Recognition, OCR&#xff09;&#xff0c;是一种将不同形式的文档&#xff08;如扫描的纸质文档、PDF文件或数字相机拍摄的图片&#xff09;中的文字转换成可编辑和可搜索的数据的技术。随着技…

Haproxy 高可用代理原理配置(Haproxy High Availability Proxy Principle Configuration)

Haproxy 高可用代理原理 简介 Haproxy是一个开源的高可用性负载均衡解决方案&#xff0c;提供基于TCP和HTTP的应用代理服务。它支持高并发连接&#xff0c;能够处理大量的请求&#xff0c;特别适合高负载站点和需要会话保持的应用场景。 主要特点 ‌高可用性‌&#xff1a;…

企业微信可信域名个人配置方法,个人添加企业微信可信IP方法5.0版本,无论是否企业认证都通用。

自动22年11月份开始更新企业微信可信域名配置方法后&#xff0c;先后阿里&#xff08;22年11月&#xff09;1.0可信域名配置方法、腾讯&#xff08;2022年12月14日&#xff09;2.0版本可信域名配置方法、百度&#xff08;2023年1月27日&#xff09;、华为&#xff08;2023年2月…