CSS + JS + Vue 实现仿百度 "换一换" 功能

在很多网站,包括百度,都有一个 "换一换" 的功能,让用户能够随机或顺序查看更多内容。以下是一个使用 Vue.js,CSS 和 JavaScript 实现的简单示例。

Vue 组件

假设我们有一个 Switcher.vue 组件:

vue 复制代码
<template>
  <div>
    <div class="content-container">
      <div v-for="item in currentPageData" :key="item.id" class="content-item">
        {{ item.content }}
      </div>
    </div>
    <button @click="switchPage">换一换</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      allData: [], // 存放所有数据
      currentPage: 0, // 当前页数
      itemsPerPage: 8, // 每页显示的条数
    };
  },
  computed: {
    // 计算当前页的数据
    currentPageData() {
      const start = this.currentPage * this.itemsPerPage;
      const end = start + this.itemsPerPage;
      return this.allData.slice(start, end);
    },
    // 计算总页数
    totalPages() {
      return Math.ceil(this.allData.length / this.itemsPerPage);
    },
  },
  methods: {
    // 换页函数
    switchPage() {
      this.currentPage = (this.currentPage + 1) % this.totalPages;
    },
  },
  // 假设我们在这里用一个模拟的 API 来填充 allData
  mounted() {
    this.allData = Array.from({ length: 63 }, (_, i) => ({
      id: i + 1,
      content: `内容${i + 1}`,
    }));
  },
};
</script>

<style scoped>
.content-container {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
}

.content-item {
  flex-basis: calc(25% - 10px);
  margin: 5px;
  padding: 10px;
  border: 1px solid #ccc;
  text-align: center;
}
</style>

解释

  1. 数据和状态 : 我们有一个 allData 数组来存放所有数据,一个 currentPage 来追踪当前是第几页,以及一个 itemsPerPage 来定义每页有多少条数据。

  2. 计算属性 : 我们用 currentPageData 来计算当前应该显示哪些数据,用 totalPages 来计算总共有多少页。

  3. 换一换功能 : 我们的 switchPage 方法简单地将 currentPage 加1,然后取模 totalPages,这样就能循环显示所有页面。

  4. 样式: 我们用简单的 CSS 来布局,每行显示 4 个内容项。

  5. 初始化 : 在 mounted 生命周期钩子中,我们初始化了模拟数据。在实际应用中,这里通常会是一个 API 调用。

这个组件现在可以实现基础的 "换一换" 功能。你可以根据实际需要进行进一步的定制和优化。希望这个示例能帮助你!

相关推荐
xjt_090117 分钟前
基于 Vue 3 构建企业级 Web Components 组件库
前端·javascript·vue.js
我是伪码农29 分钟前
Vue 2.3
前端·javascript·vue.js
夜郎king1 小时前
HTML5 SVG 实现日出日落动画与实时天气可视化
前端·html5·svg 日出日落
辰风沐阳1 小时前
JavaScript 的宏任务和微任务
javascript
夏幻灵2 小时前
HTML5里最常用的十大标签
前端·html·html5
冰暮流星2 小时前
javascript之二重循环练习
开发语言·javascript·数据库
Mr Xu_2 小时前
Vue 3 中 watch 的使用详解:监听响应式数据变化的利器
前端·javascript·vue.js
未来龙皇小蓝2 小时前
RBAC前端架构-01:项目初始化
前端·架构
程序员agions2 小时前
2026年,微前端终于“死“了
前端·状态模式
万岳科技系统开发2 小时前
食堂采购系统源码库存扣减算法与并发控制实现详解
java·前端·数据库·算法