当前位置:首页 > 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 实现豆瓣电影类功能的实现方案,涵盖核心模块和技术要点: 数据获取与 API 调用 使用豆瓣开放 API(需注意调用频率限制)或第三方代理接口 推荐 axios 进行异步请求,配合…

vue el 实现

vue el 实现

Vue 中使用 Element UI (el) 的实现方法 Element UI 是一个基于 Vue 的组件库,提供丰富的 UI 组件,常用于快速构建企业级中后台产品。以下介绍 Vue 项目中集成和使…

vue实现画廊

vue实现画廊

Vue实现画廊的基本方法 使用Vue.js实现画廊功能可以通过多种方式完成,以下是一种常见的实现方案: 安装必要依赖 npm install vue-gallery --save 引入组件并注册…

vue 实现赋值

vue 实现赋值

Vue 实现赋值的方法 在 Vue 中,赋值操作通常涉及数据绑定和响应式更新。以下是几种常见的赋值方式: 直接赋值给 data 属性 在 Vue 实例的 data 对象中定义的属性可以直接通过 th…

自实现vue

自实现vue

实现 Vue 的核心功能 要实现一个简化版的 Vue,需要理解其核心功能:数据响应式、模板编译、虚拟 DOM 和组件系统。以下是关键步骤的分解: 数据响应式 Vue 使用 Object.define…

vue模版实现

vue模版实现

Vue 模板实现方法 Vue 模板是 Vue.js 的核心特性之一,用于声明式地将 DOM 绑定至底层 Vue 实例的数据。以下是几种常见的 Vue 模板实现方式: 单文件组件(SFC) 使用 .v…