nutui二次封装上拉加载、下拉刷新组件

<!-- nutUI -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@nutui/nutui@2.1.8/dist/nutui.min.css">
<!-- nutUI -->
    <script src="https://cdn.jsdelivr.net/npm/@nutui/nutui@2.1.8/dist/nutui.min.js"></script>

封装组件:

scroller.vue:

复制代码
<template>
    <div class="my_scroller_box" :class="className">
        <nut-scroller
            class="inner_scroller_class"
            :is-un-more="isUnMore" 
            :is-loading="isLoading"
            :type="'vertical'"
            :stretch="50"
            :propsTime="500"
            :pulldownTxt="pulldownTxt"
            :loadMoreTxt="loadMoreTxt"
            :unloadMoreTxt="unloadMoreTxt"
            @loadMore="loadMoreFun"
            @pulldown="pulldownFun"> 
            <div slot="list" >
                <div class="content_wrap">
                    <slot name="content"></slot>
                </div>
            </div>
        </nut-scroller>
    </div>
</template>

<script>
export default {
    props:{
        className: {
        //样式名称
            type: String,
            default: ''
        },
        pulldownTxt:{
            type:String,
            default:'下拉刷新'
        },
        loadMoreTxt:{
            type:String,
            default:'上拉加载'
        },
        unloadMoreTxt:{
            type:String,
            default:'没有更多了'
        },
        isUnMore:{
        //没有更多?
        //若没有更多,底部会出现 没有更多字样
            type:Boolean,
            default:false
        },
        isLoading:{
        //正在加载?
        //若正在加载的状态:上拉和下拉会无效
           type:Boolean,
           default:false 
        }
    },
    data(){
        return{
        }
    },
    methods: {
        pulldownFun(){
        //下拉方法
            this.$emit("pulldownFun");
        },
        loadMoreFun(){
        //上拉
            this.$emit("loadMoreFun");
        }
    },
}
</script>

<style lang="scss" scoped>
.my_scroller_box{
    flex-shrink: 0;
    .inner_scroller_class{
        border:1px solid yellow;
        width:100%;
    }
}
</style>
复制代码

使用:

复制代码
<template>
    <div class="tiwen_box">
        <scroller 
            :class="'cus_scroller'"
            :isUnMore="isUnMore"
            :isLoading="isLoading"
            @pulldownFun="pulldownFun"
            @loadMoreFun="loadMoreFun">
                <div slot="content">
                    内容
                </div>
            </scroller>
    </div>
</template>

<script>
import scroller from "@/components/scroller";
export default {
    components:{
        scroller,
    },
    data(){
        return{
            isUnMore:false,//没有更多?
            isLoading:false,//正在加载?
            
        }
    },
    methods: {
        pulldownFun(){
        //上拉加载
            console.log("下拉")
            var self=this;
            this.isLoading=true;//正在加载
            setTimeout(()=>{
                self.isLoading=false;
            },3000)
        },
        loadMoreFun(){
        //下拉刷新
            console.log("上拉")
            this.isLoading=true;//正在加载
            setTimeout(()=>{
                self.isLoading=false;
            },3000)
        }
    },
}
</script>

<style lang="scss" scoped>
.tiwen_box{
    border:1px solid green;
    height:100vh;
    box-sizing: border-box;
}
.cus_scroller{
    height:100vh;
    border:1px solid red;
}
</style>
复制代码

 

 

 

 

 

posted @   古墩古墩  Views(897)  Comments(0Edit  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2019-05-20 js监听transition过渡事件
2019-05-20 vue使用子路由时,默认的子路由视图不显示问题
点击右上角即可分享
微信分享提示