当前位置:首页 > 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实现vnc

vue实现vnc

Vue 实现 VNC 客户端 在 Vue 项目中实现 VNC 客户端功能,可以通过集成现有的 VNC 客户端库或组件完成。以下是具体实现方法: 安装依赖库 使用 noVNC 或其他 VNC 客户端…

vue实现driver

vue实现driver

Vue 实现 Driver.js 引导功能 Driver.js 是一个轻量级的 JavaScript 库,用于在网页上创建引导式导览。以下是在 Vue 项目中集成 Driver.js 的详细方法:…

vue cli 实现

vue cli 实现

Vue CLI 实现步骤 安装 Vue CLI 确保 Node.js 版本在 8.9 或以上。通过 npm 全局安装 Vue CLI: npm install -g @vue/cli 创建新项目 使…

vue 实现跳转

vue 实现跳转

Vue 实现页面跳转的方法 在 Vue 中实现页面跳转通常可以通过以下几种方式实现,具体选择取决于项目需求和技术栈(如是否使用 Vue Router)。 使用 Vue Router 进行编程式导航…

vue实现队列

vue实现队列

Vue 实现队列功能 在 Vue 中实现队列功能可以通过多种方式完成,以下是几种常见的方法: 使用数组模拟队列 队列遵循先进先出(FIFO)原则,可以用数组的 push 和 shift 方法模拟入队…

vue实现github

vue实现github

Vue 实现 GitHub 相关功能 创建 GitHub API 请求 在 Vue 项目中,可以使用 axios 或 fetch 与 GitHub API 进行交互。需要在 GitHub 上创建个人访…