五、点击切换、滚动切换、键盘切换

news2024/12/25 1:16:18

简介

通过事件改变当前展示的信息组件,交互的事件有点击上下切换、鼠标轮动上下切换、键盘上下键切换。欢迎访问个人的简历网站预览效果

本章涉及修改与新增的文件:App.vuepublic
在这里插入图片描述

一、鼠标点击上下箭头切换

<template>
  <div class="app-background">
    <!-- 上一页信息 -->
    <div class="absolute" @click="prev" style="top: 50px;">
      <img src="/up.svg" class="logo" alt="Email" /> // 图片可以在iconfont上获取,选择svg格式
    </div>

    <el-carousel ref="carousel" height="100vh" direction="vertical" :autoplay="false">
      <el-carousel-item>
        <first />
      </el-carousel-item>
      <el-carousel-item>
        <second />
      </el-carousel-item>
      <el-carousel-item>
        <third />
      </el-carousel-item>
      <el-carousel-item>
        <fourth />
      </el-carousel-item>
      <el-carousel-item>
        <fifth @showProject="showProject" />
      </el-carousel-item>
    </el-carousel>
    <!-- 下一页信息 -->
    <div class="absolute" @click="next" style="bottom: 50px;">
      <img src="/down.svg" class="logo" alt="Email" /> // 图片可以在iconfont上获取,选择svg格式
    </div>
    <!-- 项目经验详情 -->
    <el-dialog v-model="showDialog" center>
      <div class="family">
        <div class="text18" style="text-align: center;font-weight: bold;">{{ projectInfo.projectName }}</div>
        <div class="margin-top" style="text-align: center;">
          {{ projectInfo.projectStartTime }} - {{ projectInfo.projectEndTime }}
        </div>
        <div class="flex margin-top">
          <div style="min-width: 100px;">项目描述:</div>
          <div>{{ projectInfo.projectDescription }}</div>
        </div>
        <div class="flex margin-top">
          <div style="min-width: 100px;">项目职责:</div>
          <div>{{ projectInfo.projectDuty }}</div>
        </div>
        <div class="flex margin-top">
          <div style="min-width: 100px;">技术栈:</div>
          <div>{{ projectInfo.projectStack }}</div>
        </div>
        <div class="flex margin-top" v-if="projectInfo.projectOnline">
          <div style="min-width: 100px;">线上地址:</div>
          <el-link :href="projectInfo.projectOnline" target="_blank">
            {{ projectInfo.projectOnline }}
          </el-link>
        </div>
      </div>
    </el-dialog>
  </div>
</template>

<script setup lang="ts">
import first from './components/First.vue'
import second from './components/Second.vue'
import third from './components/Third.vue'
import fourth from './components/Fourth.vue'
import fifth from './components/Fifth.vue'
import project from './utils/Project.ts' // 引入数据
import { ref } from 'vue'
const showDialog = ref(false)
const projectInfo = ref(project['center'])

const carousel = ref()
// 获取默认项目经验数据
const showProject = (value: any) => {
  if (project[value]) {
    projectInfo.value = project[value]
    showDialog.value = true
  }
}

// 上一页
const prev = () => {
  carousel.value.prev()
}

// 下一页
const next = () => {
  carousel.value.next()
}
</script>

<style scoped>
.app-background {
  position: relative;
  width: 100%;
  height: 100vh;
  background-image: url('./assets/bgBig.png');
  background-repeat: no-repeat;
  background-position: center 0;
  background-size: cover;
}

.el-carousel__item {
  min-height: 100vh;
  background-color: rgba(10, 10, 10, 0.3);
}

::v-deep(.el-dialog) {
  background-color: rgb(250, 235, 215);
  animation: jackInTheBox;
  animation-duration: 1.5s;
}

.absolute {
  position: absolute;
  z-index: 10;
  left: calc(50% - 14px);
  opacity: .25;
  transition: all .4s linear 0s;
}

.absolute:hover {
  transform: scale(1.18);
  opacity: .85;
}

.logo {
  width: 28px;
  height: 28px;
}
</style> 

二、鼠标滚轮上下滚动切换

<template>
    // 添加 handleWheel 滚动事件
  <div class="app-background" @wheel="handleWheel">
    ...
  </div>
</template>
<script setup lang="ts">
import first from './components/First.vue'
import second from './components/Second.vue'
import third from './components/Third.vue'
import fourth from './components/Fourth.vue'
import fifth from './components/Fifth.vue'
import project from './utils/Project.ts' // 引入数据
import { ref } from 'vue'
const showDialog = ref(false)
const projectInfo = ref(project['center'])

const carousel = ref()
// 获取默认项目经验数据
const showProject = (value: any) => {
  if (project[value]) {
    projectInfo.value = project[value]
    showDialog.value = true
  }
}

// 上一页
const prev = () => {
  carousel.value.prev()
}

// 下一页
const next = () => {
  carousel.value.next()
}

// 鼠标滚轮 滚动事件 防抖
let timer: any = null
const handleWheel = (e: any) => {
  if (showDialog.value) return
  let lock: Boolean = !timer;
  if (lock) {
    if (e.deltaY > 0) {
      next()
    } else if (e.deltaY < 0) {
      prev()
    }
    timer = setTimeout(() => {
      timer = null;
    }, 500); // 防抖
  }
}
</script>
<style scoped>
 ... 
</style> 

三、键盘上下键切换

...
<script setup lang="ts">
...
let timer: any = null
const handleWheel = (e: any) => {
  if (showDialog.value) return
  let lock: Boolean = !timer;
  if (lock) {
    if (e.deltaY > 0) {
      next()
    } else if (e.deltaY < 0) {
      prev()
    }
    timer = setTimeout(() => {
      timer = null;
    }, 800);
  }
}

// 触发时回调事件 防抖
const handleKeyDown = (event: any) => {
  if (showDialog.value) return
  let lock: Boolean = !timer;
  if (lock) {
    if (event.key === 'ArrowUp') { prev() }
    else if (event.key === 'ArrowDown') { next() }
    timer = setTimeout(() => {
      timer = null;
    }, 800);
  }
}

// 监听键盘触发事件
document.addEventListener('keydown', handleKeyDown);
</script>
...
=> To Be Continued

点赞 评论 收藏 ~~ 留言讨论,如有错误,也希望大家不吝指出。 ~~ 点赞 评论 收藏

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

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

相关文章

Learn Prompt-Prompt 高级技巧:Agent的颠覆性影响

OpenAI联合创始人Andrej Karpathy在一个开发者活动上发表讲话&#xff0c;谈及了他和OpenAI对AI Agents的看法。他将过去开发 AI Agents 的困难与现在依靠新技术工具而带来的新机会进行了对比。Andrej Karpathy 认为普通人、创业者和极客在构建 AI Agents 方面相比 OpenAI 这样…

还有一天活动就开始我定好闹钟准时上线

&#xff08;整理衣服&#xff09;&#xff08;大步流星走上台&#xff09;&#xff08;拿起麦克风&#xff09;&#xff08;激情发言&#xff09;请大家&#xff08;热泪盈眶&#xff09;&#xff08;哽咽&#xff09;关注&#xff08;流泪&#xff09;&#xff08;擦眼泪&…

蓝桥杯打卡Day11

文章目录 最长上升子序列最长上升子序列II 一、最长上升子序列IO链接 本题思路:本题是一关于dp问题中的一个类型是最长上升子序列问题&#xff0c;首先我们将状态表示出来&#xff1a;f[i]表示以a[i]结尾的最大的上升序列。状态计算&#xff08;集合划分&#xff09;&#xf…

如何防盗版软件

有多少公司&#xff0c;至今都无法摆脱被盗版软件支配的恐惧&#xff1f; 其实大多数时候&#xff0c;企业都是被动当了大冤种&#xff0c;因为他们也并不会主动要求员工使用破解软件。实在是架不住有些不懂版权的、心存侥幸的员工私下里使用。只要公司联网&#xff0c;就一定…

猫头虎博主第5️⃣期赠书活动:《Java官方编程手册(第12版·Java 17)套装上下册》

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

JK405R-SOP16录音芯片ic方案的常见问题集锦包含录音长度功耗以及外挂spiflash

目录 问题1 1、KT405R是什么&#xff1f; 具备哪些功能&#xff1f; 有什么特色&#xff1f; 问题2 2、KT405R录音的机制是怎样的&#xff1f; 问题3 3、KT405R的供电电压详细说明&#xff1f;以及功耗控制手段 问题4 4、KT405R支持多段录音&#xff1f;每段时长如何划…

招商信诺人寿基于 Apache Doris 统一 OLAP 技术栈实践

本文导读&#xff1a; 当前&#xff0c;大数据、人工智能、云计算等技术应用正在推动保险科技发展&#xff0c;加速保险行业数字化进程。在这一背景下&#xff0c;招商信诺不断探索如何将多元数据融合扩充&#xff0c;以赋能代理人掌握更加详实的用户线索&#xff0c;并将智能…

mysql redis的区别

.mysql和redis的数据库类型 mysql是关系型数据库&#xff0c;主要用于存放持久化数据&#xff0c;将数据存储在硬盘中&#xff0c;读取速度较慢。 redis是NOSQL&#xff0c;即非关系型数据库&#xff0c;也是缓存数据库&#xff0c;即将数据存储在缓存中&#xff0c;缓存的读取…

Stm32_点灯

利用HAL库基本语法实现C8T6点灯操作 引脚配置 PB3、4 、5 //设置为output PB6、7 设置Input且为上拉初始化代码&#xff1a; 由于3、4、5引脚默认输出为0灯泡默认点亮所以要将他们初始化为1 void Inint(){//初始化灯泡函数熄灭HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PI…

无涯教程-JavaScript - RADIANS函数

描述 RADIANS函数将度数转换为弧度。度和弧度之间的转换是通过以下关系式计算的 180度π弧度 其中π是数学常数,PI3.14159265358979 ... 语法 RADIANS (angle)争论 Argument描述Required/OptionalAngleAn angle in degrees that you want to convert.Required 适用性 E…

主动写入流对@ResponseBody注解的影响 | 京东云技术团队

问题回溯 2023年Q2某日运营反馈一个问题&#xff0c;商品系统商家中心某批量工具模板无法下载&#xff0c;导致功能无法使用&#xff08;因为模板是动态变化的&#xff09; 商家中心报错&#xff08;JSON串&#xff09;&#xff1a; {"code":-1,"msg":&…

http概念

概念&#xff1a;HTTP&#xff0c;hyper text transfer protocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则。 特点&#xff1a; 1.基于TCP协议&#xff1a;面向连接&#xff0c;安全。 2.基于请求-响应模型的&#xff1a;一次请求对应一…

2.求循环小数

题目 对于任意的真分数 N/M &#xff08; 0 < N < M &#xff09;&#xff0c;均可以求出对应的小数。如果采用链表表示各个小数&#xff0c;对于循环节采用循环链表表示&#xff0c;则所有分数均可以表示为如下链表形式。 输入&#xff1a; N M 输出&#xff1a; 转换…

内容创作者如何下载头条号西瓜视频的视频

如果你是一位科技博客作者或是视频创作专家&#xff0c;我相信你必然会遇到这样的问题&#xff1a; 如何将头条号的西瓜视频的视频下载下来&#xff1f; 对于这个问题&#xff0c;其实并不存在所谓的标准答案&#xff0c;因为头条号和西瓜视频并没有提供官方支持的下载方式。…

文件外发流程如何设置,才能进行事前事中事后管控呢?

随着信息技术的快速发展&#xff0c;企业内部数据的安全性成为业务运行过程中的关键问题之一。尤其是对于那些包含商业秘密、客户数据以及机密文件等敏感信息的企业而言&#xff0c;文件的外发往往会导致严重的商业损失和声誉损害。根据IBM的数据报告&#xff0c;2022年全球数据…

【二叉搜索树】将二叉搜索树变平衡-力扣 1382 题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

一文解析 Python 读取配置文件的常用方法!

在程序运行使用当中&#xff0c;尤其是框架设计中&#xff0c;配置文件是必不可少的&#xff0c;配置文件的存在能够放置参数或者选项设置&#xff0c;使得程序更加灵活可用&#xff0c;下面就来介绍 Python 读取配置文件的常用方法。 常用的配置文件种类有很多&#xff0c;甚至…

【Nginx27】Nginx学习:代理模块(一)基本配置与概念

Nginx学习&#xff1a;代理模块&#xff08;一&#xff09;基本配置与概念 来了来了它来了。要说 Nginx 最早最出名的名头是什么&#xff1f;相信不少老码农马上就会想到&#xff0c;最开始&#xff0c;Nginx 的名头就是一款性能最高的 反向代理 服务器。现在其实也是&#xff…

Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果

相信大家都已经听说过&#xff0c;明年的 Harmony Next 版本将正式剥离 AOSP 支持 &#xff0c;基于这个话题我已经做过一期问题汇总 &#xff0c;当时在现有 App 如何兼容 Harmony Next 问题上提到过&#xff1a; 华为内部也主导适配目前的主流跨平台方案&#xff0c;主动提供…

听GPT 讲Istio源代码--pilot(7)

File: istio/pilot/pkg/model/log.go 在Istio项目中&#xff0c;istio/pilot/pkg/model/log.go文件的作用是定义了Istio Pilot的日志记录功能。 该文件中定义了一个名为log的全局日志记录器&#xff0c;并且还定义了一些与日志记录相关的变量&#xff0c;如verbose、verboseCou…