vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > Vue.js多屏切换

基于Vue.js实现简洁的多屏切换效果

作者:清空代码

在实际开发中,多屏切换是常见的需求,尤其是在需要展示大量内容或信息时,下面我将向大家展示我是如何实现三屏,并通过动态按钮控制切换屏幕的,感兴趣的小伙伴跟着小编一起来看看吧

准备工作

在开始之前,请确保你已经安装了 Vue CLI。我们将使用以下命令创建一个新的 Vue.js 项目,并运行:

vue create screen-switcher
cd screen-switcher
npm run serve

实现多屏布局

首先,我们需要定义多个屏幕,并确保每个屏幕占据整个视口的宽度和高度。我们将使用 CSS 的 vw 和 vh 单位来保证每个屏幕自适应设备尺寸。

<div class="screens">
  <div class="screen left-screen">
    <h1>左屏</h1>
  </div>
  <div class="screen center-screen">
    <h1>中屏</h1>
  </div>
  <div class="screen right-screen">
    <h1>右屏</h1>
  </div>
</div>

每个屏幕都使用 flex 布局进行居中,确保内容能够完美显示在屏幕中央。

.screen {
  width: 100vw;
  height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 3em;
}

实现动态屏幕切换

通过 Vue.js 的 data 和 methods,我们可以根据用户的操作来动态切换屏幕。我们使用 translateX 属性让屏幕在水平方向上滑动。

export default {
  data() {
    return {
      currentScreen: 1, // 当前显示的屏幕索引,默认为中屏
    };
  },
  methods: {
    switchScreen(screenIndex) {
      this.currentScreen = screenIndex; // 切换到指定屏幕
    },
  },
};

通过动态绑定 transform,我们可以在用户切换屏幕时平滑过渡。

<div class="screens" :style="{ transform: `translateX(-${currentScreen * 100}vw)` }"></div>

添加用户交互与按钮

接下来,在页面底部添加切换屏幕的按钮。当用户鼠标悬停在按钮区域时,按钮会平滑显示,允许用户切换不同的屏幕。

<div class="controls" @mouseover="showButtons = true" @mouseleave="showButtons = false">
  <transition name="fade">
    <div v-if="showButtons" class="button-wrapper">
      <button @click="switchScreen(0)">左屏</button>
      <button @click="switchScreen(1)">中屏</button>
      <button @click="switchScreen(2)">右屏</button>
    </div>
  </transition>
</div>

优化按钮样式与动画

为了提升用户体验,我为按钮和按钮容器添加了一些样式,例如渐变背景、阴影效果和悬停动画。

效果图:

完整代码及完整注释:

<template>
  <div class="container">
    <!-- 三屏显示区域 -->
    <div class="screens" :style="{ transform: `translateX(-${currentScreen * 100}vw)` }">
      <div class="screen left-screen">
        <h1>左屏</h1>
      </div>
      <div class="screen center-screen">
        <h1>中屏</h1>
      </div>
      <div class="screen right-screen">
        <h1>右屏</h1>
      </div>
    </div>

    <!-- 控制按钮显示区域,当鼠标悬停时显示按钮 -->
    <div
        class="controls"
        @mouseover="showButtons = true"
        @mouseleave="showButtons = false"
    >
    <transition name="fade"> <!-- 使用Vue的过渡效果 -->
      <div v-if="showButtons" class="button-wrapper">
        <!-- 切换到左屏 -->
        <button @click="switchScreen(0)">左屏</button>
        <!-- 切换到中屏 -->
        <button @click="switchScreen(1)">中屏</button>
        <!-- 切换到右屏 -->
        <button @click="switchScreen(2)">右屏</button>
      </div>
    </transition>
  </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentScreen: 1, // 当前显示的屏幕索引,默认显示中屏
      showButtons: false, // 控制按钮的显示与隐藏,初始为隐藏状态
    };
  },
  methods: {
    // 切换屏幕的函数,接收屏幕索引作为参数
    switchScreen(screenIndex) {
      this.currentScreen = screenIndex; // 更新当前屏幕为点击的屏幕
    },
  },
};
</script>

<style scoped>
/* 设置页面和容器的基础样式,确保页面无滚动条 */
html, body {
  height: 100%;  /* 页面高度占满视口 */
  margin: 0;  /* 去除默认的页面外边距 */
  overflow: hidden;  /* 禁止页面滚动 */
}

.container {
  width: 100vw;  /* 容器宽度为整个视口宽度 */
  height: 100vh;  /* 容器高度为整个视口高度 */
  overflow: hidden;  /* 禁止滚动条 */
  position: relative;  /* 设置相对定位,为了让控制区域绝对定位在底部 */
}

/* 三个屏幕的布局样式 */
.screens {
  display: flex;  /* 使用flex布局,使屏幕在水平方向排列 */
  width: 300vw;  /* 容器宽度为三个屏幕的总宽度 */
  height: 100%;  /* 高度占满整个父容器 */
  transition: transform 0.5s ease-in-out;  /* 添加屏幕切换时的平滑过渡动画 */
}

/* 单个屏幕的样式 */
.screen {
  width: 100vw;  /* 每个屏幕宽度为视口宽度 */
  height: 100vh;  /* 每个屏幕高度为视口高度 */
  display: flex;  /* flex布局,方便内容居中显示 */
  align-items: center;  /* 垂直居中 */
  justify-content: center;  /* 水平居中 */
  font-size: 3em;  /* 设置屏幕标题的字体大小 */
}

/* 各个屏幕的背景色 */
.left-screen {
  background-color: #ffcccc;  /* 左屏为淡红色 */
}

.center-screen {
  background-color: #ccffcc;  /* 中屏为淡绿色 */
}

.right-screen {
  background-color: #ccccff;  /* 右屏为淡紫色 */
}

/* 控制区域的样式 */
.controls {
  position: absolute;  /* 绝对定位,确保控制区域固定在底部 */
  bottom: 20px;  /* 离底部20px */
  left: 50%;  /* 居中对齐 */
  transform: translateX(-50%);  /* 通过transform将其完全居中 */
  display: flex;  /* 使用flex布局 */
  justify-content: center;  /* 按钮在容器内居中 */
  width: 100%;  /* 控制区域宽度为父容器的100% */
  height: 100px;  /* 高度为100px */
}

/* 按钮容器的样式,优化按钮区域外观 */
.button-wrapper {
  display: flex;  /* flex布局,方便按钮水平排列 */
  justify-content: center;  /* 按钮居中排列 */
  background-color: rgba(255, 255, 255, 0.8);  /* 半透明的背景色 */
  padding: 15px 30px;  /* 设置内边距 */
  border-radius: 25px;  /* 圆角效果 */
  box-shadow: 0 8px 30px rgba(0, 0, 0, 0.15);  /* 添加柔和的阴影效果 */
  transition: all 0.3s ease;  /* 设置容器过渡效果 */
}

/* 按钮的样式 */
.button-wrapper button {
  padding: 15px 25px;  /* 内边距,确保按钮大小适中 */
  margin: 0 15px;  /* 按钮之间的间距 */
  font-size: 1.2em;  /* 按钮文字大小 */
  font-weight: bold;  /* 按钮文字加粗 */
  cursor: pointer;  /* 鼠标悬停时显示为指针 */
  background: linear-gradient(135deg, #6dd5ed, #2193b0);  /* 按钮的渐变背景色 */
  color: #fff;  /* 按钮文字为白色 */
  border: none;  /* 无边框 */
  border-radius: 15px;  /* 圆角按钮 */
  box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);  /* 按钮阴影效果 */
  transition: background-color 0.3s ease, box-shadow 0.3s ease, transform 0.3s ease;  /* 添加按钮的过渡效果 */
}

/* 鼠标悬停时按钮的效果 */
.button-wrapper button:hover {
  background: linear-gradient(135deg, #2193b0, #6dd5ed);  /* 背景色反转 */
  box-shadow: 0 6px 20px rgba(0, 0, 0, 0.2);  /* 阴影加深 */
  transform: translateY(-5px);  /* 按钮有轻微升起效果 */
}

/* 过渡动画样式 */
.fade-enter-active, .fade-leave-active {
  transition: opacity 0.5s ease;  /* 控制透明度的过渡效果 */
}
.fade-enter, .fade-leave-to {
  opacity: 0;  /* 进入时透明度从0开始,离开时透明度为0 */
}
</style>

到此这篇关于基于Vue.js实现简洁的多屏切换效果的文章就介绍到这了,更多相关Vue.js多屏切换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文