Vue.js上下滚动加载组件的实例代码
发布时间 - 2026-01-11 02:22:53 点击率:次由于工作的需要并鉴于网上的vue.js滚动加载方案不合适,自己写了一个简单实用的。就短短的150行代码。

组件代码
// scrollLoader.vue
// 滚动加载组件
<style scoped>
.container-main {margin: 0 auto; overflow: auto; overflow-x: hidden; padding: 0;}
.loading{ width: 100%; height: 40px; position: relative; overflow: hidden; text-align: center; margin: 5px 0 ; color: #999; font-size: 13px;}
.loading-icon{color: #707070;};
.loader {
font-size: 10px;
margin: 8px auto;
text-indent: -9999em;
width: 24px;
height: 24px;
border-radius: 50%;
background: #999;
background: -moz-linear-gradient(left, #999 10%, rgba(255, 255, 255, 0) 42%);
background: -webkit-linear-gradient(left, #999 10%, rgba(255, 255, 255, 0) 42%);
background: -o-linear-gradient(left, #999 10%, rgba(255, 255, 255, 0) 42%);
background: -ms-linear-gradient(left, #999 10%, rgba(255, 255, 255, 0) 42%);
background: linear-gradient(to right, #999 10%, rgba(255, 255, 255, 0) 42%);
position: relative;
-webkit-animation: load3 1s infinite linear;
animation: load3 1s infinite linear;
}
.loader:before {
width: 50%;
height: 50%;
background: #999;
border-radius: 100% 0 0 0;
position: absolute;
top: 0;
left: 0;
content: '';
}
.loader:after {
background: #f5f5f5;
width: 72%;
height: 75%;
border-radius: 68%;
content: '';
margin: auto;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
}
@-webkit-keyframes load3 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@keyframes load3 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
</style>
<template>
<div id="scrollLoader-container" class="container-main">
<div class="loading" v-if="topLoading">
<div class="loader">加载中...</div>
</div>
<div :style="'min-height:' + realMinHeight + 'px; overflow-x:hidden'">
<slot></slot>
</div>
<div class="loading" v-if="bottonLoading">
<div class="loader">加载中...</div>
</div>
</div>
</template>
<script>
export default {
name: "scroll-loader",
props: {
//给slot传一个最小值,保证一开始能出现滚动条
'minHeight': {
type: Number,
default: 800
},
},
created(){
},
computed: {
realMinHeight(){
return this.minHeight + 30
}
},
data() {
return {
topLoading: false,
bottonLoading: false,
stopTopLoading: false, //是否停止传播滚动到顶部事件
stopBottonLoading: false, //是否停止传播滚动到底部事件
}
},
mounted(){
this.listenScroll();
},
methods: {
listenScroll(){
var me = this;
var topDone = (stopTopLoading) => {
me.topLoading = false;
if(stopTopLoading) me.stopTopLoading = true;
};
var bottonDone = (stopBottonLoading) => {
me.bottonLoading = false;
if(stopBottonLoading) me.stopBottonLoading = true;
};
setTimeout(function(){
var scrollContainer = document.getElementById('scrollLoader-container');
scrollContainer.onscroll = function(){
if(scrollContainer.scrollTop<=0 && !me.stopTopLoading){
if(me.topLoading) return;
me.topLoading = true;
me.$emit('scroll-to-top', topDone);
}
if((scrollContainer.offsetHeight + scrollContainer.scrollTop+1 >= scrollContainer.scrollHeight) && !me.stopBottonLoading){
if(me.bottonLoading) return;
me.bottonLoading = true;
scrollContainer.scrollTop += 40;
me.$emit('scroll-to-botton', bottonDone);
}
}
}, 50)
},
}
}
</script>
源码:https://github.com/doterlin/vue-wxChat
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# vue
# js加载组件
# Vue.js上下滚动加载
# Vue.js滚动加载
# vue实现分页加载效果
# vue实现的上拉加载更多数据/分页功能示例
# Vue.js实现无限加载与分页功能开发
# Javascript vue.js表格分页
# ajax异步加载数据
# vue.js 表格分页ajax 异步加载数据
# vue element-ui table表格滚动加载方法
# Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
# vue中实现滚动加载更多的示例
# Vue 无限滚动加载指令实现方法
# vue实现纯前端表格滚动分页加载
# 加载
# 加载中
# 写了
# 不合适
# 大家多多
# 滚动条
# 最小值
# 网上
# icon
# loader
# indent
# size
# position
# px
# relative
# font
# color
# rgba
# left
# gradient
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
Python文件流缓冲机制_IO性能解析【教程】
JavaScript如何实现继承_有哪些常用方法
WordPress 子目录安装中正确处理脚本路径的完整指南
Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】
如何快速打造个性化非模板自助建站?
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
百度浏览器如何管理插件 百度浏览器插件管理方法
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
PHP正则匹配日期和时间(时间戳转换)的实例代码
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
Laravel如何处理和验证JSON类型的数据库字段
教学论文网站制作软件有哪些,写论文用什么软件
?
如何用虚拟主机快速搭建网站?详细步骤解析
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
如何在宝塔面板创建新站点?
北京的网站制作公司有哪些,哪个视频网站最好?
Laravel如何集成Inertia.js与Vue/React?(安装配置)
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
5种Android数据存储方式汇总
Laravel如何为API生成Swagger或OpenAPI文档
如何快速重置建站主机并恢复默认配置?
如何在Tomcat中配置并部署网站项目?
潮流网站制作头像软件下载,适合母子的网名有哪些?
Laravel如何处理CORS跨域请求?(配置示例)
Laravel如何使用Blade组件和插槽?(Component代码示例)
b2c电商网站制作流程,b2c水平综合的电商平台?
Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
zabbix利用python脚本发送报警邮件的方法
如何在景安云服务器上绑定域名并配置虚拟主机?
java ZXing生成二维码及条码实例分享
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
高防服务器:AI智能防御DDoS攻击与数据安全保障
如何快速上传自定义模板至建站之星?
如何为不同团队 ID 动态生成多个“认领值班”按钮
如何在局域网内绑定自建网站域名?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】
香港服务器如何优化才能显著提升网站加载速度?
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
Laravel如何实现用户注册和登录?(Auth脚手架指南)
上一篇:企业网站托管需注意哪些核心问题?
下一篇:怎样配置Apache日志记录
上一篇:企业网站托管需注意哪些核心问题?
下一篇:怎样配置Apache日志记录

