这是我见过最牛逼的滑动加载前端框架

news2025/1/20 7:17:31

文章目录

  • 前言
  • 一、mescroll简介
  • 二、快速开始
  • 三、一分钟入门mescroll图片懒加载
  • 四、mescroll在vue中的使用
  • 五、小结


前言

在手机端实现下拉刷新和下拉加载是最常见不过的需求了。今天大师兄就给大家分享一个非常精致的js框架:mescroll.
在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

一、mescroll简介

mescroll.js 是在 H5端 运行的下拉刷新和上拉加载插件。1.4.1以上版本,还能配置图片懒加载效果。

mescroll.js 是原生Javascript开发的, 不依赖jquery,zepto等,还支持vue。

请添加图片描述

二、快速开始

  1. 下载并引用 mescroll.min.css , mescroll.min.js
// unpkg的CDN:
  <link rel="stylesheet" href="https://unpkg.com/mescroll.js@1.4.1/mescroll.min.css">
  <script src="https://unpkg.com/mescroll.js@1.4.1/mescroll.min.js" charset="utf-8"></script>
  
  // jsdelivr的CDN:
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/mescroll.js@1.4.1/mescroll.min.css">
  <script src="https://cdn.jsdelivr.net/npm/mescroll.js@1.4.1/mescroll.min.js" charset="utf-8"></script>
  1. 这是基础版本的使用,方便新手快速开始2. 拷贝以下布局结构 :
<div id="mescroll" class="mescroll"> //id可自定义
    <div> //这个div不能删,否则上拉加载的布局会错位.
         //列表内容...
      </div>
</div>
  1. 这里注意:"mescroll"的class不能删,同时第二层的div不能删,否则上拉加载的布局会错位.(可以改成ul或者其他容器标签)3. 固定mescroll的div高度. 推荐通过定位的方式,简单快捷
.mescroll{
  position: fixed;
  top: 50px;
  bottom: 0;
  height: auto; 
}
  1. 创建mescroll对象 :
 var mescroll = new MeScroll("mescroll", { //第一个参数"mescroll"对应上面布局结构div的id (1.3.5版本支持传入dom对象)
          //如果您的下拉刷新是重置列表数据,那么down完全可以不用配置,具体用法参考第一个基础案例
    down: {
     callback: downCallback //下拉刷新的回调,别写成downCallback(),多了括号就自动执行方法了
    },
    up: {
     callback: upCallback, //上拉加载的回调
     //以及一些常用的配置,当然不写也可以的.
    }
   });

上拉加载时,除了callback属性回调外,还有其他常用的配置,如:加载页码配置:page: { num : 0 ,size : 10 ,time : null},

无数据的布局:htmlNodata:

– END –

(可自定义内容),

回到顶部按钮的配置:toTop: {src:‘…’, offset: 50, btnClick: null},

懒加载:lazyLoad: {use: true, attr: ‘imgurl’, delay:500, …}等。5. 处理回调(刷新和加载) :

 //下拉刷新的回调
  function downCallback() {
   // 处理方式一: 重置mescroll内部变量(如mescroll.num=1和mescroll.hasNext=true), 自动触发upCallback
   mescroll.resetUpScroll()
   
   // 处理方式二: 单独处理下拉刷新的逻辑
   $.ajax({
    url: 'xxxxxx',
    success: function(data) {
     //联网成功的回调,隐藏下拉刷新的状态;
     mescroll.endSuccess(); //无参. 注意结束下拉刷新是无参的
     //设置数据
     //setXxxx(data);//自行实现 TODO
    },
    error: function(data) {
     //联网失败的回调,隐藏下拉刷新的状态
     mescroll.endErr();
    }
   });
  }
  
  //上拉加载的回调 page = {num:1, size:10}; num:当前页 默认从1开始, size:每页数据条数,默认10
  function upCallback(page) {
   var pageNum = page.num; // 页码, 默认从1开始 如何修改从0开始 ?
   var pageSize = page.size; // 页长, 默认每页10条
   $.ajax({
    url: 'xxxxxx?num=' + pageNum + "&size=" + pageSize,
    success: function(data) {
     var curPageData = data.xxx; // 接口返回的当前页数据列表
     var totalPage = data.xxx; // 接口返回的总页数
     var totalSize = data.xxx; // 接口返回的总数据量
     var hasNext = data.xxx; // 接口返回的是否有下一页 (true/false)
     
     //以上数据结构都是基本的,主要是为了满足mescroll对数据结构的要求。不一定要接口返回,也可以前端自定义。
     
     //方法一(推荐): 后台接口有返回列表的总页数 totalPage
     //必传参数(当前页的数据个数, 总页数)
     //mescroll.endByPage(curPageData.length, totalPage);
       
     //方法二(推荐): 后台接口有返回列表的总数据量 totalSize
     //必传参数(当前页的数据个数, 总数据量)
     //mescroll.endBySize(curPageData.length, totalSize);
       
     //方法三(推荐): 您有其他方式知道是否有下一页 hasNext
     //必传参数(当前页的数据个数, 是否有下一页true/false)
     //mescroll.endSuccess(curPageData.length, hasNext);
     
     //curPageData.length必传的原因:
     1. 使配置的noMoreSize 和 empty生效
     2. 判断是否有下一页的首要依据: 
        当传的值小于page.size时(说明不满页了),则一定会认为无更多数据;
        比传入的totalPage, totalSize, hasNext具有更高的判断优先级;
     3. 当传的值等于page.size时,才会取totalPage, totalSize, hasNext判断是否有下一页
     传totalPage, totalSize, hasNext目的是避免方法四描述的小问题
     
     // 设置列表数据 自行实现 TODO
     // if(page.num == 1) document.getElementById("xxxxList").innerHTML="" // 第一页,先置空,再追加
     // setListData(curPageData);
    },
    error: function(e) {
     //联网失败的回调,隐藏下拉刷新和上拉加载的状态
     mescroll.endErr();
    }
   });
  }

– 以上为mescroll最基本的用法,强烈建议您下载并查看 mescroll官网的基础案例 , 发现mescroll更强大的功能 ~

三、一分钟入门mescroll图片懒加载

  1. 确保mescroll至少到1.4.1版本
  2. 初始化mescroll的时候,在up中配置lazyLoad的use为true :
var mescroll = new MeScroll("mescroll", {
  up: {
   lazyLoad: {
           use: true, // 是否开启懒加载,默认false
           attr: 'imgurl', // 网络地址的属性名 (图片加载成功会移除该属性): <img imgurl='网络图  src='占位图''/>
           showClass: 'mescroll-lazy-in', // 图片加载成功的显示动画: 渐变显示,参见mescroll.css
           delay: 500, // 列表滚动的过程中每500ms检查一次图片是否在可视区域,如果在可视区域则加载图片
           offset: 200 // 超出可视区域200px的图片仍可触发懒加载,目的是提前加载部分图片
       }
  }
 })
  1. 设置img或div的 imgurl 属性, 值为图片的网络地址
 img标签: <img imgurl="网络图" src="占位图"/> // 占位图直接在src设置; 图片加载成功,就会替换src的占位图
 div或其他标签: <div imgurl="网络图" style="background-image: url(占位图)"><div> // 占位图在css中设置; 图片以背景图的形式展示
  1. 至此mescroll的懒加载功能已经可以正常使用了,mescroll在列表滚动时会自动加载可视区域内的图片. 另外,有时候您可能会动态添加或修改图片,希望手动触发一下懒加载, 那么只需调用如下方法:
    mescroll.lazyLoad() 或 mescroll.endByPage() 或 mescroll.endBySize() 或 mescroll.endSuccess() 即可.

四、mescroll在vue中的使用

不要使用cnpm安装, 因为更新下来有可能是旧的版本, 使用npm或yarn

npm install --save mescroll.js 

yarn add  mescroll.js 

引入mescroll组件

import MescrollVue from 'mescroll.js/mescroll.vue'

页面示例代码

  <template>
     <div>
       <!--mescroll滚动区域的基本结构-->
       <mescroll-vue ref="mescroll" :down="mescrollDown" :up="mescrollUp" @init="mescrollInit">
         <!--内容...-->
       </mescroll-vue>
     </div>
   </template>
   
   <script>
   // 引入mescroll的vue组件
   import MescrollVue from 'mescroll.js/mescroll.vue'
   
   export default {
     components: {
       MescrollVue // 注册mescroll组件
     },
     data () {
       return {
         mescroll: null, // mescroll实例对象
         mescrollDown:{}, //下拉刷新的配置. (如果下拉刷新和上拉加载处理的逻辑是一样的,则mescrollDown可不用写了)
         mescrollUp: { // 上拉加载的配置.
           callback: this.upCallback, // 上拉回调
           //这里可以添加一些常用的配置,当然不写也可以的
         },
         dataList: [] // 列表数据
       }
     },
     beforeRouteEnter (to, from, next) { // 如果没有配置顶部按钮或isBounce,则beforeRouteEnter不用写
       next(vm => {
         // 滚动到原来的列表位置,恢复顶部按钮和isBounce的配置
         vm.$refs.mescroll && vm.$refs.mescroll.beforeRouteEnter()
       })
     },
     beforeRouteLeave (to, from, next) { // 如果没有配置顶部按钮或isBounce,则beforeRouteLeave不用写
       // 记录列表滚动的位置,隐藏顶部按钮和isBounce的配置
       this.$refs.mescroll && this.$refs.mescroll.beforeRouteLeave()
       next()
     },
     methods: {
       // mescroll组件初始化的回调,可获取到mescroll对象
       mescrollInit (mescroll) {
         this.mescroll = mescroll  // 如果this.mescroll对象没有使用到,则mescrollInit可以不用配置
       },
       // 上拉回调 page = {num:1, size:10}; num:当前页 ,默认从1开始; size:每页数据条数,默认10
       upCallback (page, mescroll) {
         // 联网请求
         axios.get('xxxxxx', {
           params: {
             num: page.num, // 页码
             size: page.size // 每页长度
           }
         }).then((response) => {
           // 请求的列表数据
           let arr = response.data
           // 如果是第一页需手动置空列表
           if (page.num === 1) this.dataList = []
           // 把请求到的数据添加到列表
           this.dataList = this.dataList.concat(arr)
           // 数据渲染成功后,隐藏下拉刷新的状态
           this.$nextTick(() => {
             mescroll.endSuccess(arr.length)
           })
         }).catch((e) => {
           // 联网失败的回调,隐藏下拉刷新和上拉加载的状态;
           mescroll.endErr()
         })
       }
     }
   }
   </script>

五、小结

mescroll可以实习一套代码多端运行, 支持uni-app,完美运行于android, iOS, 手机各浏览器,且兼容PC端主流浏览器。官网文档也很相信,还有很多经典案例供学习和使用。温馨提示:一个界面可有多个mescroll实例/组件。

mescroll 地址
http://www.mescroll.com/

文章来自 大师兄 @微信公众号 前端实验室

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/408789.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cursor:GPT-4 驱动的强大代码编辑器

Cursor &#xff08;https://www.cursor.so/&#xff09;是 GPT-4 驱动的一款强大代码编辑器&#xff0c;可以辅助程序员进行日常的编码。下面通过一个实际的例子来展示 Cursor 如何帮助你编程。这个例子做的事情是网页抓取。抓取的目标是百度首页上的百度热搜&#xff0c;如下…

使用Python进行网站页面开发——HTML

目录 一、HTML基础语法 1.HTML是什么&#xff1f; 2.HTML基本结构 3.HTML注释 二、HTML常用标签介绍 1.文本标签 2.格式化标签 3.图片标签 4.超级链接标签 5.表格标签&#xff08;用来显示数据&#xff09; 6.表单标签&#xff08;用来接收数据&#xff09; 7.行内…

ACM模式下JavaScript(js)的输入输出 V8 Node

OJ在线编程常见输入输出练习场 ACM模式下分V8和node.js node.jsV8内置基本模块&#xff0c;相当于java中的JREJVMjava标准库 node就是带有能操作IO和网络库的V8引擎&#xff0c;提供了很多可调用的API使得JavaScript能够读写文件&#xff0c;网络请求&#xff0c;系统信息等…

【IIS搭建网站】本地电脑做服务器搭建web站点并公网访问「内网穿透」

文章目录1.前言2.Windows网页设置2.1 Windows IIS功能设置2.2 IIS网页访问测试3. Cpolar内网穿透3.1 下载安装Cpolar3.2 Cpolar云端设置3.3 Cpolar本地设置4.公网访问测试5.结语1.前言 在网上各种教程和介绍中&#xff0c;搭建网页都会借助各种软件的帮助&#xff0c;比如网页…

前端项目如何部署到服务器实现网址访问

目录 前言 需要用到的东西 购买云服务器和域名 绑定域名 使用Xshell连接云服务器 下载Nginx 安装nginx 配置nginx 启动nginx 传输文件 配置防火墙 卸载自带的防火墙 安装iptables防火墙 最后 前言 写了那么久的前端&#xff0c;就想着让朋友们欣赏欣赏&#xff0…

ElementUI快速上手(jar包本地下载)

Element-ui是饿了么前端团队推出的基于vue进行开发的前端框架。 最近刚学了Element-ui&#xff0c;迫不及待练练手&#xff0c;却发现现成的组件样式用不了。引用官网的使用方法&#xff0c;如图&#xff1a; 展示的效果也是不尽人意&#xff0c;在百度的过程中发现可能是链接…

相对定位relative、绝对定位absolute、固定定位fixed

注&#xff1a;默认情况下的定位是 postion&#xff1a;static&#xff1b; 使用定位时&#xff0c;常常使用偏移量对位置进行描述&#xff1a;left、right、top、bottom定位时&#xff0c;使用z-indent可以元素的堆叠顺序&#xff0c;例&#xff1a;z-indent&#xff1a;1&…

Spring Security 权限控制

日积月累&#xff0c;水滴石穿 &#x1f604; 前言 项目版本Boot2.3.12.RELEASESecurity5.3.9.RELEASE 官网文档 在前面的文章中&#xff0c;所有的接口只需要登录就能访问。并没有对每个接口进行权限限制。 在正式的系统中&#xff0c;一个用户会拥有一个或者多个角色&#…

三种架构模式——MVC、MVP、MVVM

目录 前言 一、MVC&#xff08;Model-View-Controller&#xff09; 1、简介 2、框架图 二、MVP&#xff08;Model-View-Presenter&#xff09; 1、简介 2、框架图 三、MVVM&#xff08;Model-View-ViewModel&#xff09; 1、简介 2、框架图 四、总结 前言 MV系列框…

微信小程序插件--wxml-to-canvas(生成图片)

一、需求 项目中要实现一个将图片分享到朋友圈的功能&#xff0c;将生成的海报转成图片保存到手机。用到了wxml-to-canvas插件。 二、官方示例使用方法 1.安装wxml-to-canvas npm install --save wxml-to-canvas2.JSON 组件声明 {"usingComponents": {"wxml-t…

多款顶级好用的 Vue 表单设计器测评推荐,可拖拽生成表单

本文完整版&#xff1a;《多款顶级好用的 Vue 表单设计器测评推荐&#xff0c;可拖拽生成表单》 Vue 表单设计器form-generator - 适配 Element Plus UI 框架的表单设计器form-render - 阿里团队开源表单设计器&#xff0c;自家 Antd UI 框架友好form-create - 支持Vue3 及 Ele…

内网npm私有仓库搭建以及使用教程

前言 前端团队沉淀一套通用的UI库、工具类、脚手架&#xff0c;不允许在公网发布&#xff0c;内网npm私有库搭建需求应运而生。如何在内网环境搭建npm私有仓库并使用&#xff1f;主角登场了 —— Verdaccio。接下来我来教大家使用 verdaccio 在内网环境中搭建npm私有仓库。 基…

canvas详细入门教程(1W字 吐血分享)

大家好&#xff0c;我是潘潘 今天为大家带来的是我已经写了很久了的canvas详细教程&#xff0c;对入门canvas很有帮助。 点击跳转原文&#xff1a; canvas详细教程原文 canvas是什么&#xff1f; 简单来说&#xff0c;<canvas> 是HTML5中的标签&#xff0c;它是一个容…

20分钟学会flex布局,熊二都表示学会了,你呢?

✏️ 作者&#xff1a;大二计算机专业学生 ♉ 星座&#xff1a;金牛座 &#x1f3e0; 主页&#xff1a;查看更多文章 &#x1f3c2; 关键&#xff1a;flex 前端布局 熊二都会 大家好&#xff0c;我是小周&#xff0c;今天分享的是熊二都能学会的前端 flex 布局&#xff0c;篇幅…

小程序 getActivePinia was called with no active Pinia. Did you forget to install pinia?

小程序项目使用pinia做状态管理报错&#xff1a; Error: [&#x1f34d;]: getActivePinia was called with no active Pinia. Did you forget to install pinia? const pinia createPinia() app.use(pinia) app运行打包时有个同样的错误 错误原因是&#xff1a;在外部js/t…

Collections类详解

目录 一.Collections概述&#xff1a; 1.1什么是Collections类&#xff1a; 1.2 Collections类和collection的区别和联系&#xff1a; 二. Collections类的主要方法&#xff1a; 一.Collections概述&#xff1a; 1.1 什么是Collections类&#xff1a; Java.util.Collections…

【Node.js】Express框架的基本使用

✍️ 作者简介: 前端新手学习中。 &#x1f482; 作者主页: 作者主页查看更多前端教学 &#x1f393; 专栏分享&#xff1a;css重难点教学 Node.js教学 从头开始学习 目录 初识Express Express简介 什么是Express 进一步理解 Express Express能做什么 Express的基本使用 …

前端登录退出:处理Token问题(获取、缓存、失效处理)以及代码实现

目录一、什么是Token二、获取token三、Token失效处理注意点1、主动退出2、Token过期① 逻辑图②方案③代码实现3、被人顶号① 逻辑图② 方案③代码实现一、什么是Token Token是服务端生成的一串字符串&#xff0c;当用户第一次登陆成功后&#xff0c;服务器会生成一个token&am…

vue 实现自适应屏幕

1.安装自适应屏幕插件&#xff08;优先使用vscode安装&#xff0c;需要调整px转化rem比例&#xff09; &#xff08;1&#xff09;安装插件&#xff1a; npm i lib-flexible --save &#xff08;2&#xff09;mian.js引入&#xff1a; import lib-flexible/flexible.js 2. 如果…

java中controller层是干嘛的?

最近在研究开源框架的源码&#xff0c;打算改写开源框架&#xff0c;适用于自身的业务场景。于是找到了一个框架(spiderFlow)。 根据他的git上的教程&#xff0c;搭建了一个。 controller层&#xff0c;在我们写代码的时候&#xff0c;一般为接口层&#xff0c;与前端&#xf…