mui的上拉刷新和mui禁用下拉刷新新能不用双webview吗

Mui&下拉刷新,刷新完成功能实现
自己做的项目,要求下拉刷新功能中,正在刷新,显示上次刷新时间,刷新完成,显示最新刷新时间
Mui中,正在刷新后,就直接回弹了,没有刷新完成这个过程,然后我就在中间添加了一个过程。
代码如下:
//-----------日期格式化-------------
function formatDate(now) {
var toLocaleDateString = now.toLocaleDateString();
var hour = now.getHours();
var minute = now.getMinutes();
var second = now.getSeconds();
return toLocaleDateString + " " + hour + ":" + minute + ":" +
var myDate = new Date();
myDate.setTime(myDate.getTime()-4000);
var OldData = formatDate(myDate);
//-----------Mui初始化-------------
mui.init({
swipeBack: false,
pullRefresh: {
container: '#pullrefresh',
callback: pulldownRefresh,
height: 60,
auto: false,
contentdown: "下拉可以刷新", //可选,在下拉可刷新状态时,下拉刷新控件上显示的标题内容
contentover: "释放立即刷新", //可选,在释放可刷新状态时,下拉刷新控件上显示的标题内容
contentrefresh:
'&&&' + "正在刷新" +
' + "上次刷新:" + OldData, //可选,正在刷新状态时,下拉刷新控件上显示的标题内容
contentmore: '刷新完成'
//-----------下拉刷新-------------
function pulldownRefresh() {
var myDate1 = new Date();
var FirstData = formatDate(myDate1);
// console.log(FirstData);
var text =
document.getElementsByClassName("mui-pull-caption");
console.log(text[0].innerHTML);
setTimeout(function() {
text[0].innerHTML =
"&&&刷新完成" +
' + "最新刷新:" + FirstD
// 设置刷新完成的时间为2.5秒后显示,把dom的innerHTML获取到后,修改为“刷新完成
和最新时间”即可。
setTimeout(function() {
location.reload();
mui('#pullrefresh').pullRefresh().endPulldownToRefresh();
//refresh completed
//设置正在刷新的时间为3秒,dom的innerHTML 为“正在刷新 和 上次刷新时间”。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
第二次上拉就读取不到JSON里的数据了 ‘content’--undefined好了 我直接上代码了;谢谢各路大神解答HTML:
&!DOCTYPE html&
&meta charset="utf-8"&
&title&Hello MUI&/title&
&meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no"&
&meta name="apple-mobile-web-app-capable" content="yes"&
&meta name="apple-mobile-web-app-status-bar-style" content="black"&
&link rel="stylesheet" href="css/mui.min.css"&
&!--下拉刷新容器--&
&div id="pullrefresh" class="mui-content mui-scroll-wrapper"&
&div class="mui-scroll"&
&!--数据列表--&
&ul class="mui-table-view mui-table-view-chevron"&
&script src="js/mui.min.js"&&/script&
mui.init({
pullRefresh: {
container: '#pullrefresh',
contentdown:'下拉刷新',
contentover:'释放刷新',
contentrefresh:'刷新中...',
callback: pulldownRefresh
contentrefresh: '加载中...',
contentnomore: '哇哦,没有了...',
callback: pullupRefresh
* 下拉刷新具体业务实现
function pulldownRefresh() {
setTimeout(function() {
var table = document.body.querySelector('.mui-table-view');
var cells = document.body.querySelectorAll('.mui-table-view-cell');
mui.ajax({
type: 'GET',
url: 'pull.json',
dataType: 'json',
success: function(data) {
var reaut = '';
for(var i = 0; i & 8; i++) {
var li = document.createElement('li');
li.className = 'mui-table-view-cell';
li.innerHTML = '&a class="mui-navigate-right"&' + data.lists[i].content + '&/a&';
//下拉刷新,新纪录插到最前面;
table.insertBefore(li, table.firstChild);
reaut += "&li class='mui-table-view-cell'&" +
"&a class='mui-navigate-right'&"+ data.lists[i].content +"&/a&&/li&"
table.innerHTML =
for (var i = cells.length, len = i + 3; i & i++) {
var li = document.createElement('li');
li.className = 'mui-table-view-cell';
li.innerHTML = '&a class="mui-navigate-right"&Item ' + (i + 1) + '&/a&';
//下拉刷新,新纪录插到最前面;
table.insertBefore(li, table.firstChild);
mui('#pullrefresh').pullRefresh().endPulldownToRefresh(); //refresh completed
mui('#pullrefresh').pullRefresh().refresh(true);
count = 0;
console.log(count);
var count = 0;
var counter = 0;
// 每页展示4个
var num = 8;
var pageStart = 0,
pageEnd = 0;
* 上拉加载具体业务实现
function pullupRefresh() {
setTimeout(function() {
console.log(count);
mui('#pullrefresh').pullRefresh().endPullupToRefresh((++count & 2));//参数为true代表没有更多数据了。
console.log(count);
var table = document.body.querySelector('.mui-table-view');
var cells = document.body.querySelectorAll('.mui-table-view-cell');
mui.ajax({
type: 'GET',
url: 'pull.json',
dataType: 'json',
success: function(data) {
counter++;
pageEnd = num *
pageStart = pageEnd -
for(var i = pageS i & pageE i++) {
var li = document.createElement('li');
li.className = 'mui-table-view-cell';
li.innerHTML = '&a class="mui-navigate-right"&' + data.lists[i].content + '&/a&';
table.appendChild(li);
for(var i = cells.length, len = i + 20; i & i++) {
var li = document.createElement('li');
li.className = 'mui-table-view-cell';
li.innerHTML = '&a class="mui-navigate-right"&Item ' + (i + 1) + '&/a&';
table.appendChild(li);
if(mui.os.plus) {
mui.plusReady(function() {
setTimeout(function() {
mui('#pullrefresh').pullRefresh().pullupLoading();
mui.ready(function() {
mui('#pullrefresh').pullRefresh().pullupLoading();
"lists" : [
"content":"第一"
"content":"第二"
"content":"第三"
"content":"第四"
"content":"第五"
"content":"第六"
"content":"第七"
"content":"第八"
"content":"第九"
"content":"第十"
"content":"第十一"
"content":"第十二"
"content":"第十三"
"content":"第十四"
"content":"第十五"
"content":"第十六"
"content":"第十七"
"content":"第十八"
"content":"第十九"
"content":"第二十"
"content":"第二十一"
"content":"第二十二"
"content":"第二十三"
"content":"第二十四"
这个问题已被关闭,原因:问题已解决 - 问题已解决,且对他人无借鉴意义
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
这个问题已经被关闭无法回答
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。JavaScript
极简的JS函数
为实现下拉刷新功能,大多数 H5 框架都是通过 DIV 模拟下拉回弹动画,在低端 android 手机上,DIV 动画经常出现卡顿现象(特别是图文列表的情况);
mui 通过使用原生 webview 下拉刷新解决这个 DIV 动画的卡顿问题,并且拖动效果更加流畅;
这里提供两种模式的下拉刷新,以适用不同场景:
下拉刷新时,触发的是原生下拉刷新控件,而整个webview位置不会发生变化,所以不会在拖动过程中发生DOM重绘,当控件拖动到一定位置触发动态加载数据以及刷新操作。此模式下拉刷新,相比双webview 模式,不创建额外 webview,性能更优。
mui 初始化时设置pullRefresh各项参数,与双 webview 模式的子页面设置是一样的。
DOM结构无特殊要求,只需要指定一个下拉刷新容器标识即可
mui.init({
pullRefresh : {
container:&#refreshContainer&,//下拉刷新容器标识,querySelector能定位的css选择器均可,比如:id、.class等
style:'circle',//必选,下拉刷新样式,目前支持原生5+ ‘circle’ 样式
color:'#2BD009', //可选,默认“#2BD009” 下拉刷新控件颜色
height:'50px',//可选,默认50px.下拉刷新控件的高度,
range:'100px', //可选 默认100px,控件可下拉拖拽的范围
offset:'0px', //可选 默认0px,下拉刷新控件的起始位置
auto: true,//可选,默认false.首次加载自动上拉刷新一次
callback :pullfresh-function //必选,刷新函数,根据具体业务来编写,比如通过ajax从服务器获取新数据;
性能更优,体现在两点:
相比双webview,不创建额外子 webview 性能消耗更少
下拉拖动过程中不会发生重绘,也减少了性能消耗
目前仅支持‘cricle’样式以及该样式的颜色自定义
使用双 webview 模式的下拉刷新,创建一个子 webview 添加列表;拖动时,拖动的是一个完整的 webview,避免了类似 DIV 拖动流畅度不好的问题,回弹动画使用原生动画;在 iOS 平台,H5 的动画已经比较流畅,故依然使用 H5 方案。两个平台实现虽有差异,但 mui 经过封装,可使用一套代码实现下拉刷新。
主页面内容比较简单,只需要创建子页面即可:
mui.init({
subpages:[{
url:pullrefresh-subpage-url,//下拉刷新内容页面地址
id:pullrefresh-subpage-id,//内容页面标志
top:subpage-top-position,//内容页面顶部位置,需根据实际页面布局计算,若使用标准mui导航,顶部默认为48px;
.....//其它参数定义
iOS平台的下拉刷新,使用的是 mui 封装的,
为保证两个平台的 DOM 结构一致,内容页面需统一按照如下 DOM 结构构建:
&!--下拉刷新容器--&
&div id=&refreshContainer& class=&mui-content mui-scroll-wrapper&&
&div class=&mui-scroll&&
&!--数据列表--&
&ul class=&mui-table-view mui-table-view-chevron&&
其次,通过 mui.init 方法中 pullRefresh 参数配置下拉刷新各项参数,如下:
mui.init({
pullRefresh : {
container:&#refreshContainer&,//下拉刷新容器标识,querySelector能定位的css选择器均可,比如:id、.class等
height:50,//可选,默认50.触发下拉刷新拖动距离,
auto: true,//可选,默认false.首次加载自动下拉刷新一次
contentdown : &下拉可以刷新&,//可选,在下拉可刷新状态时,下拉刷新控件上显示的标题内容
contentover : &释放立即刷新&,//可选,在释放可刷新状态时,下拉刷新控件上显示的标题内容
contentrefresh : &正在刷新...&,//可选,正在刷新状态时,下拉刷新控件上显示的标题内容
callback :pullfresh-function //必选,刷新函数,根据具体业务来编写,比如通过ajax从服务器获取新数据;
可自定义下拉刷新样式,更改文字等等.
相比单 webview,性能消耗更大,不过都比 div 模式的要好用
DOM结构需要统一配置
下拉刷新组件滚动到特定位置的方法类似区域滚动组件
要在窗口文档显示区左上角显示的文档的 x 坐标
要在窗口文档显示区左上角显示的文档的 y 坐标
滚动时间周期,单位是毫秒
示例:在 hello mui 下拉刷新示例中,实现了双击标题栏,让列表快速回滚到顶部的功能;代码如下:
var contentWebview = null;
//监听标题栏的双击事件
document.querySelector('header').addEventListener('doubletap',function () {
if(contentWebview==null){
contentWebview = plus.webview.currentWebview().children()[0];
//内容区滚动到顶部
contentWebview.evalJS(&mui('#pullrefresh').pullRefresh().scrollTo(0,0,100)&);
可以解决修改下拉刷新子页面默认top值后,下拉刷新提示框位置异常问题
根据实际需求在父页面给mui-content设置top属性
.mui-bar-nav ~ .mui-content .mui-pull-top-pocket{
top: 180px !important;
mui 支持设置首次加载时自动触发一次下拉刷新,配置如下auto参数为:true即可,上拉加载同样支持此配置
mui.init({
pullRefresh : {
container:&#refreshContainer&,//下拉刷新容器标识,querySelector能定位的css选择器均可,比如:id、.class等
auto: true,//可选,默认false.首次加载自动下拉刷新一次
auto: true //可选,默认false.首次加载自动上拉加载一次
两种模式在下拉刷新过程中,当获取新数据后,都需要执行 endPulldown 方法,
该方法的作用是关闭“正在刷新”的样式提示,内容区域回滚顶部位置,如下:
function pullfresh-function() {
//业务逻辑代码,比如通过ajax从服务器获取新数据;
//注意,加载完新数据后,必须执行如下代码,注意:若为ajax请求,则需将如下代码放置在处理完ajax响应数据之后
//没有更多内容了,endPulldown 传入true, 不再执行下拉刷新
mui('#refreshContainer').pullRefresh().endPulldown();
问答社区话题讨论:
代码块激活字符:&&&& mpull (DOM结构) minitpull (初始化组件)mmpull(组件方法)输入关键字或相关内容进行搜索
我尝试使用双webview来做上拉刷新和下拉加载,但是发现样式很难控制。这个页面的头上面有一个标题和一个图片,这样我发现下面的代码
mui.init({
pullRefresh: {
container: '#pullrefresh',
down: {contentdown:'下拉刷新',
contentover:'释放立即刷新',
contentrefresh:'正在刷新...' ,
callback: pulldownRefresh
contentrefresh: '正在加载...',
contentnomore:'没有更多数据了',
callback: pullupRefresh
必须是在主页面中加入了&header class=&mui-bar-nav&&&/header&才会显示,并且显示的加载标题“下拉刷新”,&释放立即刷新&,&正在刷新&都在上面如下图,能不能控制它显示的位置呢,截图如下
要回复问题请先或

我要回帖

更多关于 mui下拉刷新不能滚动 的文章

 

随机推荐