当前位置:首页 > VUE

vue实现文章滚动

2026-01-08 04:39:58VUE

Vue 实现文章滚动效果

使用 CSS 实现基础滚动

通过 CSS 的 overflowheight 属性控制滚动区域,适用于静态内容滚动。在 Vue 模板中定义固定高度的容器,内容超出后自动滚动。

<template>
  <div class="scroll-container">
    <div v-for="(item, index) in articles" :key="index" class="article-item">
      {{ item.content }}
    </div>
  </div>
</template>

<style>
.scroll-container {
  height: 300px;
  overflow-y: auto;
  border: 1px solid #eee;
}
.article-item {
  padding: 10px;
  border-bottom: 1px solid #ddd;
}
</style>

动态加载数据滚动

结合 v-for 和异步数据加载,实现滚动到底部时自动加载新内容。监听滚动事件,计算滚动位置触发加载逻辑。

<template>
  <div class="dynamic-scroll" @scroll="handleScroll">
    <div v-for="(item, index) in articles" :key="index">
      {{ item.title }}
    </div>
    <div v-if="loading">加载中...</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      articles: [],
      loading: false,
      page: 1
    };
  },
  methods: {
    async loadArticles() {
      this.loading = true;
      const newArticles = await fetchArticles(this.page);
      this.articles.push(...newArticles);
      this.page++;
      this.loading = false;
    },
    handleScroll(e) {
      const { scrollTop, clientHeight, scrollHeight } = e.target;
      if (scrollHeight - scrollTop === clientHeight) {
        this.loadArticles();
      }
    }
  },
  mounted() {
    this.loadArticles();
  }
};
</script>

使用第三方库优化体验

对于复杂滚动需求(如虚拟滚动),可引入 vue-virtual-scroller 等库,高效渲染大量数据。

安装库:

npm install vue-virtual-scroller

示例实现:

vue实现文章滚动

<template>
  <RecycleScroller
    class="scroller"
    :items="articles"
    :item-size="50"
    key-field="id"
  >
    <template v-slot="{ item }">
      <div class="article">
        {{ item.title }}
      </div>
    </template>
  </RecycleScroller>
</template>

<script>
import { RecycleScroller } from 'vue-virtual-scroller';
export default {
  components: { RecycleScroller },
  data() {
    return {
      articles: [] // 长列表数据
    };
  }
};
</script>

<style>
.scroller {
  height: 400px;
}
</style>

平滑滚动动画

通过 CSS 或 JavaScript 实现平滑滚动效果,提升用户体验。使用 scroll-behavior 或自定义动画函数。

CSS 方式:

.scroll-container {
  scroll-behavior: smooth;
}

JavaScript 动画:

vue实现文章滚动

methods: {
  scrollToTop() {
    const container = this.$el.querySelector('.scroll-container');
    const duration = 500;
    const start = container.scrollTop;
    const change = -start;
    let startTime = null;

    function animateScroll(currentTime) {
      if (!startTime) startTime = currentTime;
      const elapsed = currentTime - startTime;
      const progress = Math.min(elapsed / duration, 1);
      container.scrollTop = start + change * progress;
      if (progress < 1) requestAnimationFrame(animateScroll);
    }

    requestAnimationFrame(animateScroll);
  }
}

滚动位置恢复

在 Vue Router 的路由切换中保存和恢复滚动位置,使用 keep-alive 和滚动行为配置。

路由配置示例:

const router = new VueRouter({
  routes: [...],
  scrollBehavior(to, from, savedPosition) {
    if (savedPosition) {
      return savedPosition;
    } else {
      return { x: 0, y: 0 };
    }
  }
});

组件内使用 keep-alive

<keep-alive>
  <router-view></router-view>
</keep-alive>

标签: 文章vue
分享给朋友:

相关文章

vue页面分离的实现

vue页面分离的实现

Vue页面分离的实现方法 将Vue页面分离为多个组件或模块,有助于提升代码可维护性和复用性。以下是几种常见的实现方式: 组件化拆分 通过将页面拆分为多个子组件,每个组件负责特定功能或UI部分。使用…

vue公共列表的实现

vue公共列表的实现

实现 Vue 公共列表组件 公共列表组件通常用于展示重复结构的数据,例如商品列表、用户列表等。以下是一个典型的实现方式: 基础实现 创建可复用的列表组件 List.vue: <templ…

vue实现走势图

vue实现走势图

Vue 实现走势图的方法 使用 ECharts 库 ECharts 是一个强大的数据可视化库,支持多种图表类型,包括走势图(折线图)。在 Vue 项目中可以通过 vue-echarts 封装库或直接使…

vue实现点击旋转轮盘

vue实现点击旋转轮盘

实现点击旋转轮盘效果 在Vue中实现点击旋转轮盘效果,可以通过CSS动画和Vue的数据绑定结合完成。以下是一个完整的实现方案: 准备工作 需要安装Vue.js环境,可以通过CDN引入或使用Vue C…

vue懒加载实现难吗

vue懒加载实现难吗

vue懒加载的实现难度 Vue懒加载的实现并不复杂,核心逻辑是通过动态导入(Dynamic Imports)和路由配置或组件异步加载完成。以下是具体实现方法: 路由懒加载实现 在Vue Router…

vue前端实现下载进度

vue前端实现下载进度

实现下载进度条的基本思路 在Vue中实现下载进度条,通常需要结合XMLHttpRequest或Fetch API来监听下载进度事件。通过计算已下载数据与总数据的比例,动态更新进度条的显示。 使用XM…