GithubHelp home page GithubHelp logo

mescroll / mescroll Goto Github PK

View Code? Open in Web Editor NEW
4.3K 68.0 904.0 12.12 MB

精致的下拉刷新和上拉加载 js框架.支持vue,完美运行于移动端和主流PC浏览器 (JS framework for pull-refresh and pull-up-loading)

Home Page: http://www.mescroll.com

License: MIT License

JavaScript 18.74% CSS 2.43% Vue 56.48% HTML 22.35%
html5 css3 javascript js-framework pull-refresh pull-up-loading iscroll vue bounce nobounce

mescroll's Introduction

mescroll

mescroll -- 精致的下拉刷新和上拉加载js框架 (JS framework for pull-refresh and pull-up-loading)

  1. 主流APP案例, 丰富经典, 随心定制, 轻松拓展
  2. 自由灵活的api, 超详细的注释, 可让您快速自定义真正属于自己的下拉上拉组件

功能亮点 :

  1. 自动判断和提示列表无任何数据或无更多数据
  2. 无需手动判断处理列表的页码,时间等变量
  3. 支持监听列表滚动事件,可平滑滚动到任何位置
  4. 一个界面可支持多个实例对象,互不干扰
  5. 可临时锁定下拉刷新和上拉加载
  6. 支持图片懒加载,可配置各种占位图与显示动画,上手超简单

mescroll.js :

  1. mescroll.js是原生js写的下拉刷新和上拉加载. 支持vue, 不依赖jquery, zepto
  2. 一套代码多端运行. 完美支持android, iOS, 各手机浏览器, 兼容PC主流浏览器
  3. 快速入门, 经典案例, 接口文档, 请移步至官网 http://www.mescroll.com/api.html
  4. mescroll的vue版本已整理, 但react和angular版本还没有, 期待哪位好心的神仙能pull requests~

mescroll-uni :

  1. mescroll-uni 是用在uni-app的下拉刷新和上拉加载的组件
  2. 支持一套代码编译到iOS、Android、H5、小程序等多个平台
  3. 采用uni官方推荐的自定义组件模式, 实现了更高性能及更多Vue语法支持
  4. 继承了mescroll.js的实用功能: 自动处理分页, 自动控制无数据, 空布局提示, 回到顶部按钮 ..
  5. 快速入门, 经典案例, 接口文档, 请移步至官网 http://www.mescroll.com/uni.html

mescroll's People

Contributors

channg avatar cutecloud avatar gaoshanshanshan avatar hy20160705 avatar leotw avatar mescroll avatar rni-l avatar skura23 avatar ssmy-sunshine avatar xbossa avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mescroll's Issues

官网案例在IOS微信下下拉背景异常

非常感谢作者,目前接触下来只有该控件在Android下能流畅使用。目前市面上大部分都是整个div拖动,在低端Android很卡,且每次高度变动需要手动重置计算高度,在某些场景下显得力不从心。该控件完美解决了这个问题,但在IOS下也发现了一点不足,如图:
image

估计是触发了 webview 的 bounces,不知作者能否完善该问题?
另建议能否将该控件托管给npm,方便插件后续升级。

end没显示在最低端

一行显示两排数据 上拉加载更多时 加载数据是奇数时end显示在右半部分了

上拉之后页面不能滚动

必现:移动端和PC端,上拉->松手->继续滑动页面时页面卡住不可滑动,不操作大约几百毫秒后页面才恢复。

上拉加载更多的成功或者失败能否有回弹的效果,类似下拉刷新成功之后的回弹

场景:
假设现在第一次加载10条数据成功,再次上拉,第二次上拉加载失败,调用mescroll.endErr(),此时listview的底部会有空白(就是class为mescroll-upwarp的div被隐藏造成的),那么此时再次向下拉,是不会触发上拉加载的回调。反而下拉会触发上拉加载的回调(optUp中的offset使用的是默认的100)。会让人造成误解,明明是下拉,反而是触发加载更多回调。
所以能不能让上拉加载成功或者失败,都有回弹效果,或者让listview向上滚动class为mescroll-upwarp的div的高度。
很感谢你分享这个plugin,赞赞赞。

点击tab页时,控制台报错

点击tab菜单,如果没有数据;会一直显示正在加载数据,控制台报错mescroll.endSuccess(result.length);
result为unidentified;有数据则不会

如何处理 下拉刷新数据加载

问题描述:如何处理【下拉刷新的时候,如果数据没有更改,则不清空数据】
//TODO 在清除第一页数据的时候判断 是否是原有数据更改。如果数据有变化则下拉刷新重置页码为第一页,否则只执行动画刷新效果【不执行AJAX请求数据】;

以下为源码:采用的JS是 mescroll-for-muiscroll.js
if(pageNum == 1) this.clearDataList(); //如果是第一页,自动清空第一页列表数据

/*回调成功
*结束下拉刷新 meScroll.endSuccess();无参;
*结束上拉加载 meScroll.endSuccess(dataSize, systime); 必须传dataSize:联网获取到的数据条数;用于判断列表是否还有数据.如果不传则仅隐藏加载中的状态; systime:第一页的系统时间 (可空)
*/
MeScroll.prototype.endSuccess = function(dataSize, systime) {
//结束下拉刷新
if(this.isDownScrolling) this.endDownScroll();

//结束上拉加载
if(this.optUp.use) {
	var pageNum = this.optUp.page.num; //当前页码
	var pageSize = this.optUp.page.size; //每页长度
		//TODO 在清除第一页数据的时候判断 是否是原有数据更改。如果数据有变化则下拉刷新重置页码
	if(pageNum == 1) this.clearDataList(); //如果是第一页,自动清空第一页列表数据
	
	var isShowNoMore; //是否已无更多数据
	if(dataSize != null) {
		if(dataSize < pageSize) {
			//返回的数据不满一页时,则说明已无更多数据
			this.optUp.isLock = true;
			if(dataSize == 0 && pageNum == 1) {
				//如果第一页无任何数据且配置了空布局
				isShowNoMore = false;
				this.showEmpty();
			} else {
				//总列表数少于配置的数量,则不显示无更多数据
				var allDataSize = (pageNum - 1) * pageSize + dataSize;
				if(allDataSize < this.optUp.noMoreSize) {
					isShowNoMore = false;
				} else {
					isShowNoMore = true;
				}
				this.removeEmpty(); //移除空布局
			}
		} else {
			//还有下一页
			isShowNoMore = false;
			this.optUp.isLock = false;
			this.removeEmpty(); //移除空布局
		}
	}

	//设置加载列表数据第一页的时间
	if(pageNum == 1 && systime) this.optUp.page.time = systime;

	//隐藏上拉
	this.endUpScroll(isShowNoMore);

	//检查是否满屏自动加载下一页
	this.loadFull();
}

}

demo疑问

_20170915155454
如果所示,如果我每次请求接口返回的是某个页面的数据,不是直接加到一个数组中就行了嘛?
这里pageNum不是请求页的数字吗还是到此为止所有的页的数,不太明白。

能否只保留几页数据?

手机上无限滚动到很多页后,由于内存占用会很卡,速度很慢,请问有没有提供只保留几页数据在浏览器上的方法呢?

数据初始化成功,上拉事件未触发

mounted : function(){
this.getList();
},
methods: {
getList(){
// 上拉加载
this.mescroll = new MeScroll("mescroll", { //第一个参数"mescroll"对应上面布局结构div的id
up: {
callback: this.upCallback, //上拉回调
empty:{
warpId:"dataList",
icon : "../res/img/mescroll-empty.png" ,
tip : "亲,暂无相关数据哦~" ,
}
}
})
document.getElementById("dataList").style.display="block";
},
//上拉加载的回调 page = {num:1, size:10}; num:当前页 从1开始, size:每页数据条数
upCallback(page) {
console.log('kaishi')
var pageIndex = page.num-1;
//联网加载数据
var self = this;
this.getListDataFromNet(pageIndex, page.size, function(curPageData) {
//如果是第一页需手动制空列表
if(page.num == 1) self.pdlist = [];
//更新列表数据
self.pdlist = self.pdlist.concat(curPageData);
}, function() {
self.mescroll.endErr();
});
},
getListDataFromNet(pageNum,pageSize,successCallback,errorCallback) {
console.log(pageNum*pageSize)
this.prames.page=pageNum
SerachOrder.condition({params: this.prames})
.then((response) => {
var data=response.content;
var total=response.total;
var listData=[];
console.log(total)
for (var i = (pageNum)*pageSize; i < (pageNum+1)*pageSize; i++) {
if(i==total) break;
listData.push(data[i]);
}
successCallback&&successCallback(listData);//成功回调
}, (response) => {
console.log('fail')
})
}
}

为什么我down callback的第一个参数有问题?

up的callback的参数是正常的:{num: 1, size: 10, time: null}
down的callback参数是却是:

a {scrollDom: div#mescroll.mescroll, options: {…}, isDownScrolling: false, isUpScrolling: false, optDown: {…}, …}

完整代码如下:

var mescroll = new MeScroll("mescroll", {
            up: {
                use: false,
            },
            down: {
                use: true,
                auto: true,
                callback: function(page) {
                    console.log(page);
                },
                page: {
                    num: 0,
                    size: 5,
                    time: null
                },
                htmlNodata: '<p class="upwarp-nodata">拉到底了~别拉了~卧槽!</p>'
            }
        });

关于事件绑定问题

在首次加载数据后,点击事件可以执行

$('#dataList0').on('click', '.add', function(){
    var a = $(this).data('productid');
    console.log(a);
})

加载一次分页后,点击则不生效了

minAngle设置异常

V1.2.3中设置minAngle:90并非垂直时才刷新,目前是约80-90这个区间就执行刷新了
但当设置大于90时,是可以的,但是下拉时 文字消失不见
代码详见 #44

无法触发上拉加载?

按照 ‘mescroll所有配置项‘ demo进行初始化,可以触发下拉刷新,但是无法触发上拉加载,页面滚动时不能进入scroll事件,使用Vue框架,求提供一个思路

Uncaught TypeError: Cannot read property 'endBySize' of undefined

RT.
相关代码:

function getListData(page) {
            var dataIndex = curNavIndex;
            getListDataFromNet(dataIndex, page.num, page.size, function (pageData, totalSize) {
                console.log(pageData);
                console.log(totalSize);
                //联网成功的回调,隐藏下拉刷新和上拉加载的状态;
                //mescroll会根据传的参数,自动判断列表如果无任何数据,则提示空;列表无下一页数据,则提示无更多数据;
                mescrollArr[dataIndex].endBySize(pageData.length, totalSize)

                //设置列表数据
                setListData(pageData, dataIndex);
            }, function(){
                //联网失败的回调,隐藏下拉刷新和上拉加载的状态;
                mescrollArr[dataIndex].endErr();
            });
        }

上拉刷新完成后,加载中不能隐藏

vue里用,下拉刷新完成后,加载中不能隐藏,在成功回调里已经写了self.mescroll.endSuccess();数据也已经成功返回显示,不知什么原因,顶部一直显示加载中

关于vue

说是支持vue却没有任何在vue里面使用的案例
而且我这边使用webpack搭建的vue脚手架
根本没有引导怎么在.vue文件中怎么引入的说明
也没有说明要配置什么选项

使用问题

1,高度,祖父容器是弹性布局,父容器的flex-grow是1,也就是自动撑满剩余的空间,此时不会触发上拉刷新,设一个值之后就可以,比如100%;
2,上拉刷新对于vue不够友好(至少我这么认为),目前我的需求是上拉时触发一个方法,具体的业务逻辑应该自行处理,只需要有一个开关去控制是不是显示加载中样式就可以了,不需要传参去获取数据啥的。

不过还是要感谢作者的付出,谢谢~~

iOS上触摸无法滑动

试了在微信和Safari上浏览时,会出现页面无法滑动的现象
安卓端还没有测试

建议重构下代码

首先感谢作者的奉献,我另一个项目也是参考的这个的灵感的。

然后就是觉得这个项目目前的代码有点乱,代码风格没有统一,注释什么的也比较乱,另外代码结构上也不是很分离,建议可以模块化重构下,可以考虑使用以下方法

  • 譬如JSDoc风格的代码注释(最长用的一种)

  • 代码分成多个文件,使用gulp(或grunt)等工具自动构建

  • ...(等等)

当然了,以上仅是个人建议,觉得这样一来能让作者的水准更上一个台阶,二来能让使用这个项目的人
看到更规范的代码,学到更多的东西。

最后,开源项目不容易,赞一个!

下拉刷新--页面数据为空时

下拉刷新页面数据为空,则下拉刷新的触发区域高度为0.
建议设置一个属性来控制下拉刷新的触发区域高度,在数据为空时也能再次触发下拉刷新。

mescroll.resetUpScroll(true) 有时候会触发两次上啦加载

通过mescroll.resetUpScroll(true)在页面第一次加载的时候默认显示下拉刷新的样式

可是有时候会同时显示了上啦加载的样式,经过排查发现是有时候会执行两次上啦加载的回调

希望作者能够排查下。

正常应该是这样 http://ww1.sinaimg.cn/large/6dac2142gy1fja5wiz1dcj20k00zk74y.jpg

触发了两次上啦加载 http://ww1.sinaimg.cn/large/6dac2142gy1fja5wvz6dcj20k00zkgma.jpg

请问如何触发点击事件?

mescroll上拉加载回来的数据,比如创建成了如下结构:

  • .....
  • 然后用这样的方式绑定点击是无效的:$("li[data-url]").on("click",function(){...});
    请问应该如何绑定点击事件呢?谢谢

    Android微信端上拉加载更多的bug

    我用多个android的微信端测试,出现如下bug:下拉刷新没问题,上拉加载更多的时候没有任何反应,而且我一次请求的数据超出一屏的时候隐藏了;
    IOS的微信端测试没有任何问题;求解决!

    vue+mescroll.js

    vue项目import插件后提示Cannot set property 'MeScroll' of undefined

    Recommend Projects

    • React photo React

      A declarative, efficient, and flexible JavaScript library for building user interfaces.

    • Vue.js photo Vue.js

      🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

    • Typescript photo Typescript

      TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

    • TensorFlow photo TensorFlow

      An Open Source Machine Learning Framework for Everyone

    • Django photo Django

      The Web framework for perfectionists with deadlines.

    • D3 photo D3

      Bring data to life with SVG, Canvas and HTML. 📊📈🎉

    Recommend Topics

    • javascript

      JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

    • web

      Some thing interesting about web. New door for the world.

    • server

      A server is a program made to process requests and deliver data to clients.

    • Machine learning

      Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

    • Game

      Some thing interesting about game, make everyone happy.

    Recommend Org

    • Facebook photo Facebook

      We are working to build community through open source technology. NB: members must have two-factor auth.

    • Microsoft photo Microsoft

      Open source projects and samples from Microsoft.

    • Google photo Google

      Google ❤️ Open Source for everyone.

    • D3 photo D3

      Data-Driven Documents codes.