
分享几套我收集的MUI网站模板
mui框架的服装包包手机商城模板
http://www.sucaihuo.com/templates/4490.html
mui框架的移动端app下载界面模板
http://www.sucaihuo.com/templates/4367.html
mui租房app模板
http://www.sucaihuo.com/templates/3300.html
手机app前端开发MUI框架模板
http://www.sucaihuo.com/templates/3694.html
mui框架手机报考驾校预约wap网站模板
http://www.sucaihuo.com/templates/2139.html
mui框架的服装包包手机商城模板
http://www.sucaihuo.com/templates/4490.html
mui框架的移动端app下载界面模板
http://www.sucaihuo.com/templates/4367.html
mui租房app模板
http://www.sucaihuo.com/templates/3300.html
手机app前端开发MUI框架模板
http://www.sucaihuo.com/templates/3694.html
mui框架手机报考驾校预约wap网站模板
http://www.sucaihuo.com/templates/2139.html

mui 列表项左右滑删除功能升级(仿微信左滑 点击删除后出现确认删除)
mui 列表项左右滑删除功能升级(仿微信左滑 点击删除后出现确认删除)
mui 列表项左右滑删除功能升级(仿微信左滑 点击删除后出现确认删除)

wap2app扫一扫功能兼容性问题
hbuilder版 本:HBuilder 9.0.8.201806081953
所用代码为官方DEOM案例(如下所示):
index.html页面
<div>
<button id="btn">扫一扫</button>
</div>
<br><br><br>
<div>
<button id="pay">支付宝支付</button>
</div>
<script>
document.getElementById("btn").addEventListener("click", function() {
if(navigator.userAgent.indexOf("Html5Plus") > -1) {
var w = plus.webview.create('B.html', 'carcode1', {
'titleNView': {
'backgroundColor': '#262930',
'titleText': '扫一扫',
'titleColor': '#FFFFFF',
autoBackButton: false
}
});
plus.webview.show(w, 'slide-in-right', '300ms');
} else {
alert('请在APP中扫码');
}
});
</script>
B.html代码如下
<script type="text/javascript">
var scan;
if(window.plus) {
plusready();
} else {
document.addEventListener('plusready', plusready, false);
}
function plusready() {
setTimeout(function(){
scan = new plus.barcode.Barcode('mask');
scan.start();
scan.onmarked = function(type, result) {
if(result) {
scan.close();
mui.openWindow({
url: 'http://www.baidu.com',
id: 'info',
extras:{
result:result
}
});
}
};
},1000);
//处理返回事件
plus.key.addEventListener('backbutton', function() {
plus.webview.currentWebview().close();
//mui.back();
})
}
</script>
以上代码在真机测试时非常好,正式打包后偶尔会有一次能成功,华为多种型号手机在扫码后闪退。
opp手机扫码后也闪退。
hbuilder版 本:HBuilder 9.0.8.201806081953
所用代码为官方DEOM案例(如下所示):
index.html页面
<div>
<button id="btn">扫一扫</button>
</div>
<br><br><br>
<div>
<button id="pay">支付宝支付</button>
</div>
<script>
document.getElementById("btn").addEventListener("click", function() {
if(navigator.userAgent.indexOf("Html5Plus") > -1) {
var w = plus.webview.create('B.html', 'carcode1', {
'titleNView': {
'backgroundColor': '#262930',
'titleText': '扫一扫',
'titleColor': '#FFFFFF',
autoBackButton: false
}
});
plus.webview.show(w, 'slide-in-right', '300ms');
} else {
alert('请在APP中扫码');
}
});
</script>
B.html代码如下
<script type="text/javascript">
var scan;
if(window.plus) {
plusready();
} else {
document.addEventListener('plusready', plusready, false);
}
function plusready() {
setTimeout(function(){
scan = new plus.barcode.Barcode('mask');
scan.start();
scan.onmarked = function(type, result) {
if(result) {
scan.close();
mui.openWindow({
url: 'http://www.baidu.com',
id: 'info',
extras:{
result:result
}
});
}
};
},1000);
//处理返回事件
plus.key.addEventListener('backbutton', function() {
plus.webview.currentWebview().close();
//mui.back();
})
}
</script>
以上代码在真机测试时非常好,正式打包后偶尔会有一次能成功,华为多种型号手机在扫码后闪退。
opp手机扫码后也闪退。

解决Hbuilder出现 Uncaught ReferenceError: mui is not defined 错误的解决经验分享!!!
1、Uncaught ReferenceError: mui is not defined 问题的产生:
上午完成好的项目,手机联机测试都没问题,中午吃过饭来云端打包发布,发布后,程序App的登录页面就开始出现问题了,点击按钮没反应,而且发现登录页面的样式也丢失了,好奇怪,不知道什么原因,然后连接手机进行真机调试,发现控制台输出了:Uncaught ReferenceError: mui is not defined 这个错误,真是活见鬼了,没打包发布前好好的,发布打包后,就出现这个奇怪的错误。
2、寻求问题的解决方案:
1)粘贴错误到度娘里面,发现有不少前辈也遇到这个问题,看了一下,多数提到的因为 mui.js的路径出现错误。然后就开始调整App项目里面的
mui.js的路径,从 <script src="../js/mui.min.js"></script>
调整为 <script src="js/mui.min.js"></script>
,再调整为 <script src="../../js/mui.min.js"></script>
,同时把 mui.init(); 放到页面的最底部,然并卵,发现根本不解决问题,到底什么原因呢?
2)既然有前辈提到是路径,然后经过修改调整路径,发现根本解决不了,干着急,没办法。经过回想,是不是发布的时候,出现了错误呢?
目前的在发布项目已经出现了问题,要不要新建个项目,再尝试一次发布???说干就干,重新创建了App项目,把已经完成的项目里面使用到的必须文件粘贴过来,链接手机调试,发现又ok了,真是活见鬼了,竟然又好了,基本上可以确定一定是打包的时候出现了问题。
3、终极解决方案:
前面提到新建项目,真机联机测试,发现没有问题,这次特意留心下打包发布时的选项,选中要发布的项目,云端打包发布,
注意,注意,一定要看清楚说明再勾选【加入unpackage配置清单】,需要的App资源,例如图片,js,千万是不能勾选忽略必要的资源文件的,然后正常打包,真机安装发布后的App,一切ok,问题完美解决。
附件里面附带了解释说明。
预祝各位,开发App永远没bug,工作顺利,谢谢各位捧场!!!!
1、Uncaught ReferenceError: mui is not defined 问题的产生:
上午完成好的项目,手机联机测试都没问题,中午吃过饭来云端打包发布,发布后,程序App的登录页面就开始出现问题了,点击按钮没反应,而且发现登录页面的样式也丢失了,好奇怪,不知道什么原因,然后连接手机进行真机调试,发现控制台输出了:Uncaught ReferenceError: mui is not defined 这个错误,真是活见鬼了,没打包发布前好好的,发布打包后,就出现这个奇怪的错误。
2、寻求问题的解决方案:
1)粘贴错误到度娘里面,发现有不少前辈也遇到这个问题,看了一下,多数提到的因为 mui.js的路径出现错误。然后就开始调整App项目里面的
mui.js的路径,从 <script src="../js/mui.min.js"></script>
调整为 <script src="js/mui.min.js"></script>
,再调整为 <script src="../../js/mui.min.js"></script>
,同时把 mui.init(); 放到页面的最底部,然并卵,发现根本不解决问题,到底什么原因呢?
2)既然有前辈提到是路径,然后经过修改调整路径,发现根本解决不了,干着急,没办法。经过回想,是不是发布的时候,出现了错误呢?
目前的在发布项目已经出现了问题,要不要新建个项目,再尝试一次发布???说干就干,重新创建了App项目,把已经完成的项目里面使用到的必须文件粘贴过来,链接手机调试,发现又ok了,真是活见鬼了,竟然又好了,基本上可以确定一定是打包的时候出现了问题。
3、终极解决方案:
前面提到新建项目,真机联机测试,发现没有问题,这次特意留心下打包发布时的选项,选中要发布的项目,云端打包发布,
注意,注意,一定要看清楚说明再勾选【加入unpackage配置清单】,需要的App资源,例如图片,js,千万是不能勾选忽略必要的资源文件的,然后正常打包,真机安装发布后的App,一切ok,问题完美解决。
附件里面附带了解释说明。
预祝各位,开发App永远没bug,工作顺利,谢谢各位捧场!!!!
收起阅读 »
周报(20180608):实名认证
热门话题
- DCloud 开发者实名认证流程:推行 appid 唯一化和 App 所有者实名化是 DCloud 目前需要处理的问题,这会影响到目前以及待上线的一系列云端服务,因此需要广大开发者配合完成。
- 广告误开原因汇总及解决办法:DCloud 不会强制开通广告,如果应用中出现了非预期的广告信息,请按照此文章中的说明进行确认以及后续的操作。
iOS
- iOS 11.3 对定位权限进行了合并,使用定位需要新增一个声明:详细的声明方法以及注意事项,请参考文章中的说明。
问题清单
- Android 二维码打包后闪退:近期依旧有许多小伙伴遇到此问题,解决办法就是打包时候勾选 android.permission.VIBRATE 权限。
- 二维码扫描位置偏移:需要稍加延迟,再进行二维码的初始化。
- 在线打包的app提交不了google play,因android:targetSdkVersion级别低:目前 5+ 仅在 Android21 版本上做过完整的兼容测试,还不能保证完全兼容 Androi26 版本。目前需要通过本地(离线)打包修改配置来解决。
- 什么时候Andrioid的splash可以支持.9.png文件呀?:云端打包已支持,参考最佳回复的说明进行操作。
- ios11在应用内访问url的时候闪退,每次都闪退:页面过大,可能会引发 Webview 内核异常,需按照回复中的说明处理。
分享
- uniapp实例,电影3.1版,有兴趣的拿去学习吧
- 一个vue多页面的脚手架可以使用es6,es7,可以使用vux,vant,mint
- 使用javascript获取安全区信息
- 如何正确高效地在社区提问:学会提问,才能更好地获得他人的帮助。
最后
本周的报告就是这些,希望能对大家有所帮助。同时,也希望更多的小伙伴在社区分享自己的经验心得,交流学习。
祝大家周末愉快。
热门话题
- DCloud 开发者实名认证流程:推行 appid 唯一化和 App 所有者实名化是 DCloud 目前需要处理的问题,这会影响到目前以及待上线的一系列云端服务,因此需要广大开发者配合完成。
- 广告误开原因汇总及解决办法:DCloud 不会强制开通广告,如果应用中出现了非预期的广告信息,请按照此文章中的说明进行确认以及后续的操作。
iOS
- iOS 11.3 对定位权限进行了合并,使用定位需要新增一个声明:详细的声明方法以及注意事项,请参考文章中的说明。
问题清单
- Android 二维码打包后闪退:近期依旧有许多小伙伴遇到此问题,解决办法就是打包时候勾选 android.permission.VIBRATE 权限。
- 二维码扫描位置偏移:需要稍加延迟,再进行二维码的初始化。
- 在线打包的app提交不了google play,因android:targetSdkVersion级别低:目前 5+ 仅在 Android21 版本上做过完整的兼容测试,还不能保证完全兼容 Androi26 版本。目前需要通过本地(离线)打包修改配置来解决。
- 什么时候Andrioid的splash可以支持.9.png文件呀?:云端打包已支持,参考最佳回复的说明进行操作。
- ios11在应用内访问url的时候闪退,每次都闪退:页面过大,可能会引发 Webview 内核异常,需按照回复中的说明处理。
分享
- uniapp实例,电影3.1版,有兴趣的拿去学习吧
- 一个vue多页面的脚手架可以使用es6,es7,可以使用vux,vant,mint
- 使用javascript获取安全区信息
- 如何正确高效地在社区提问:学会提问,才能更好地获得他人的帮助。
最后
本周的报告就是这些,希望能对大家有所帮助。同时,也希望更多的小伙伴在社区分享自己的经验心得,交流学习。
祝大家周末愉快。

一个vue多页面的脚手架 有demo和教程哦
刚做的脚手架,新鲜的.
APP 演示下载地址
希望大家多issue哦
使用webpack4
MogoH5+
是一个 vue 多页面脚手架工具,结合 H5+可以快速开发安卓与苹果 APP.
即使不适用 Hbuilder 打包成 APP,本脚手架同样可以作为多页面网页生成的参考项目.
特性
支持 Npm 生态
支持 vue 语法,以及 vue 生态,比如 vux,mint,vant
支持 ES6/ES7 语法
使用 VConsole 调试
VSCode 友好
局域网便捷调试
兼容部分 mui 语法
刚做的脚手架,新鲜的.
APP 演示下载地址
希望大家多issue哦
使用webpack4
MogoH5+
是一个 vue 多页面脚手架工具,结合 H5+可以快速开发安卓与苹果 APP.
即使不适用 Hbuilder 打包成 APP,本脚手架同样可以作为多页面网页生成的参考项目.
特性
支持 Npm 生态
支持 vue 语法,以及 vue 生态,比如 vux,mint,vant
支持 ES6/ES7 语法
使用 VConsole 调试
VSCode 友好
局域网便捷调试
兼容部分 mui 语法

近期https://appstoreconnect.apple.com无法访问的解决办法
6月5日一年一度的苹果 WWDC 开发者大会在美国加州圣何塞举行。所以近期苹果更新了很多东西,导致https://appstoreconnect.apple.com都无法访问了。
iTC 后台大变身
新增加的域名
本次 iTC 后台域名改了,所以导致无法访问。
新域名:https://appstoreconnect.apple.com
以前的域名:https://itunesconnect.apple.com
访问以前的域名会自动跳转到新域名。
目前只有 safari 或者开vpn才能用其他浏览器打开域名,很多人用其他浏览器无法打开,在Windows的话根本访问。
如果没有vpn或者用不了苹果电脑Safari浏览器,下面介绍配置下谷歌浏览器实现访问的方法。
苹果可能还会调整几天,暂时用这个方法配置访问https://appstoreconnect.apple.com
安装Chrome(谷歌浏览器),或者Opera,用这两个浏览器,其他浏览器配置不行。
谷歌浏览器下载地址
https://www.google.cn/chrome/
在桌面浏览器图标右键选择属性
在目标最后加入:-disable-http2 (注意先在最后加个空格再复制-disable-http2上去,然后确定,启动浏览器就能访问https://appstoreconnect.apple.com了)
我写的ios app真机调试到上架App Store完整教程,不会上架流程的可以参考下
http://www.applicationloader.net/blog/zh/1717.html
6月5日一年一度的苹果 WWDC 开发者大会在美国加州圣何塞举行。所以近期苹果更新了很多东西,导致https://appstoreconnect.apple.com都无法访问了。
iTC 后台大变身
新增加的域名
本次 iTC 后台域名改了,所以导致无法访问。
新域名:https://appstoreconnect.apple.com
以前的域名:https://itunesconnect.apple.com
访问以前的域名会自动跳转到新域名。
目前只有 safari 或者开vpn才能用其他浏览器打开域名,很多人用其他浏览器无法打开,在Windows的话根本访问。
如果没有vpn或者用不了苹果电脑Safari浏览器,下面介绍配置下谷歌浏览器实现访问的方法。
苹果可能还会调整几天,暂时用这个方法配置访问https://appstoreconnect.apple.com
安装Chrome(谷歌浏览器),或者Opera,用这两个浏览器,其他浏览器配置不行。
谷歌浏览器下载地址
https://www.google.cn/chrome/
在桌面浏览器图标右键选择属性
在目标最后加入:-disable-http2 (注意先在最后加个空格再复制-disable-http2上去,然后确定,启动浏览器就能访问https://appstoreconnect.apple.com了)
我写的ios app真机调试到上架App Store完整教程,不会上架流程的可以参考下
http://www.applicationloader.net/blog/zh/1717.html
收起阅读 »
mui集成百度语音转写成文字
(function($, doc) {
$.plusReady(function() {
var dst;
var src;
var recordCancel = false;
var recorder = null;
var audio_tips = document.getElementById("audio_tips");
var startTimestamp = null;
var stopTimestamp = null;
var stopTimer = null;
var path1 = null;
if(mui.os.android) {
var format = "amr";
} else if(mui.os.ios) {
var format = "wav";
}
var rate = "16000";
var channel = "1";
// var cuid = 'plus.device.imei'; //mac和imei码data:audio/amr;base64,
var cuid = '';
var speech = '';
var token_url = "https://aip.baidubce.com/oauth/2.0/token?";
var len = '';
var grant_type = "grant_type=自己的&";
var APIkey = "client_id=自己的&";
var SecretKey = "client_secret=自己的&";
var AppID = "自己的";
var access_token = "";
var fileArr = [];
var ui = {
boxMsgSound: doc.querySelector('#voice'),
areaMsgList: doc.querySelector('#search'),
boxSoundAlert: doc.querySelector('#sound-alert'),
mistake: doc.querySelector('#mistake'),
voice: doc.querySelector('#voice'),
};
function msgTextFocus() {
ui.boxMsgText.focus();
setTimeout(function() {
ui.boxMsgText.focus();
}, 150);
}
//点击输入框话筒
ui.boxMsgSound.addEventListener('tap', function(event) {
recordCancel = false;
if(stopTimer) clearTimeout(stopTimer);
audio_tips.innerHTML = "点击完成";
ui.boxSoundAlert.classList.remove('rprogress-sigh');
setSoundAlertVisable(true);
jQuery('.shield').show();
recorder = plus.audio.getRecorder();
if(recorder == null) {
plus.nativeUI.toast("不能获取录音对象");
return;
}
startTimestamp = (new Date()).getTime();
recorder.record({
format: 'wav',
samplerate: '16000',
filename: "_doc/audio/"
}, function(path) {
fileArr.push(path);
if(recordCancel) return;
Audio2dataURL(path);
}, function(e) {
plus.nativeUI.toast("录音时出现异常: " + e.message);
});
}, false);
ui.boxSoundAlert.addEventListener('tap', function(event) {
setSoundAlertVisable(false);
jQuery('.shield').hide();
recorder.stop();
}, false);
var setSoundAlertVisable = function(show) {
if(show) {
ui.boxSoundAlert.style.display = 'block';
ui.boxSoundAlert.style.opacity = 1;
} else {
ui.boxSoundAlert.style.opacity = 0;
//fadeOut 完成再真正隐藏
setTimeout(function() {
ui.boxSoundAlert.style.display = 'none';
}, 200);
}
};
/**
* 录音语音文件转base64字符串
* @param {Object} path
*/
function Audio2dataURL(path) {
plus.io.resolveLocalFileSystemURL(path, function(entry) {
entry.file(function(file) {
var reader = new plus.io.FileReader();
reader.onloadend = function(e) {
var strResult = e.target.result;
var index = strResult.indexOf('base64,') + 7;
var base64Str = strResult.slice(index, strResult.length);
delVoiceFile();
len = file.size;
if(!pageUtils.netWork()) {
pageUtils.netToast();
} else {
voiceToWord(base64Str);
}
};
reader.readAsDataURL(file);
}, function(e) {
pageUtils.showToast("读写出现异常: " + e.message);
})
})
}
token();
//获取token,需要取百度语音自己获取,相关操作参考百度语音api
function token() {
if(mui.os.android) {
data2 = grant_type + APIkey + SecretKey;
} else if(mui.os.ios) {
APIkey = 'client_id=自己的&';
SecretKey = 'client_secret=自己的';
AppID = '自己的';
data2 = grant_type + APIkey + SecretKey;
}
mui.ajax(token_url, {
data: data2,
type: 'post',
contentType: "application/json; charset=utf-8",
timeout: 5000,
success: function(resp) {
access_token = resp.access_token;
},
error: function(xhr, type, errorThrown) {
pageUtils.showToast("网络请求出错");
}
});
}
//将语音转成文字
function voiceToWord(speech) {
var data1 = {
"rate": rate,
"format": format,
"channel": channel,
"cuid": AppID,
"token": access_token,
"speech": speech,
"dev_pid": 1536,
"len": len
};
mui.ajax(pageUtils.VOICEURL, {
data: data1,
type: 'post',
contentType: "application/json; charset=utf-8",
timeout: 5000,
success: function(resp) {
if(resp.result == undefined || resp.result == '') {
return;
}
jQuery('#mistake').show();
jQuery('#voice').hide();
ui.areaMsgList.value = resp.result[0];
},
error: function(xhr, type, errorThrown) {
if(type == 'timeout') {
pageUtils.showToast("录音超时");
} else {
pageUtils.showToast("网络请求出错");
}
}
});
}
//这里录音发送完成就不需要了,所以没有必要存在手机里,直接删除音频
function delVoiceFile() {
for(var i = 0; i < fileArr.length; i++) {
plus.io.resolveLocalFileSystemURL(fileArr[i], function(entry) {
if(entry.isFile) {
setTimeout(function() {
entry.remove(function(entry) {
fileArr.pop();
// pageUtils.showToast('删除成功');
}, function(e) {
// pageUtils.showToast('删除失败');
});
}, 500);
}
}, function(e) {
alert("Resolve file URL failed: " + e.message);
});
}
}
});
}(mui, document));
(function($, doc) {
$.plusReady(function() {
var dst;
var src;
var recordCancel = false;
var recorder = null;
var audio_tips = document.getElementById("audio_tips");
var startTimestamp = null;
var stopTimestamp = null;
var stopTimer = null;
var path1 = null;
if(mui.os.android) {
var format = "amr";
} else if(mui.os.ios) {
var format = "wav";
}
var rate = "16000";
var channel = "1";
// var cuid = 'plus.device.imei'; //mac和imei码data:audio/amr;base64,
var cuid = '';
var speech = '';
var token_url = "https://aip.baidubce.com/oauth/2.0/token?";
var len = '';
var grant_type = "grant_type=自己的&";
var APIkey = "client_id=自己的&";
var SecretKey = "client_secret=自己的&";
var AppID = "自己的";
var access_token = "";
var fileArr = [];
var ui = {
boxMsgSound: doc.querySelector('#voice'),
areaMsgList: doc.querySelector('#search'),
boxSoundAlert: doc.querySelector('#sound-alert'),
mistake: doc.querySelector('#mistake'),
voice: doc.querySelector('#voice'),
};
function msgTextFocus() {
ui.boxMsgText.focus();
setTimeout(function() {
ui.boxMsgText.focus();
}, 150);
}
//点击输入框话筒
ui.boxMsgSound.addEventListener('tap', function(event) {
recordCancel = false;
if(stopTimer) clearTimeout(stopTimer);
audio_tips.innerHTML = "点击完成";
ui.boxSoundAlert.classList.remove('rprogress-sigh');
setSoundAlertVisable(true);
jQuery('.shield').show();
recorder = plus.audio.getRecorder();
if(recorder == null) {
plus.nativeUI.toast("不能获取录音对象");
return;
}
startTimestamp = (new Date()).getTime();
recorder.record({
format: 'wav',
samplerate: '16000',
filename: "_doc/audio/"
}, function(path) {
fileArr.push(path);
if(recordCancel) return;
Audio2dataURL(path);
}, function(e) {
plus.nativeUI.toast("录音时出现异常: " + e.message);
});
}, false);
ui.boxSoundAlert.addEventListener('tap', function(event) {
setSoundAlertVisable(false);
jQuery('.shield').hide();
recorder.stop();
}, false);
var setSoundAlertVisable = function(show) {
if(show) {
ui.boxSoundAlert.style.display = 'block';
ui.boxSoundAlert.style.opacity = 1;
} else {
ui.boxSoundAlert.style.opacity = 0;
//fadeOut 完成再真正隐藏
setTimeout(function() {
ui.boxSoundAlert.style.display = 'none';
}, 200);
}
};
/**
* 录音语音文件转base64字符串
* @param {Object} path
*/
function Audio2dataURL(path) {
plus.io.resolveLocalFileSystemURL(path, function(entry) {
entry.file(function(file) {
var reader = new plus.io.FileReader();
reader.onloadend = function(e) {
var strResult = e.target.result;
var index = strResult.indexOf('base64,') + 7;
var base64Str = strResult.slice(index, strResult.length);
delVoiceFile();
len = file.size;
if(!pageUtils.netWork()) {
pageUtils.netToast();
} else {
voiceToWord(base64Str);
}
};
reader.readAsDataURL(file);
}, function(e) {
pageUtils.showToast("读写出现异常: " + e.message);
})
})
}
token();
//获取token,需要取百度语音自己获取,相关操作参考百度语音api
function token() {
if(mui.os.android) {
data2 = grant_type + APIkey + SecretKey;
} else if(mui.os.ios) {
APIkey = 'client_id=自己的&';
SecretKey = 'client_secret=自己的';
AppID = '自己的';
data2 = grant_type + APIkey + SecretKey;
}
mui.ajax(token_url, {
data: data2,
type: 'post',
contentType: "application/json; charset=utf-8",
timeout: 5000,
success: function(resp) {
access_token = resp.access_token;
},
error: function(xhr, type, errorThrown) {
pageUtils.showToast("网络请求出错");
}
});
}
//将语音转成文字
function voiceToWord(speech) {
var data1 = {
"rate": rate,
"format": format,
"channel": channel,
"cuid": AppID,
"token": access_token,
"speech": speech,
"dev_pid": 1536,
"len": len
};
mui.ajax(pageUtils.VOICEURL, {
data: data1,
type: 'post',
contentType: "application/json; charset=utf-8",
timeout: 5000,
success: function(resp) {
if(resp.result == undefined || resp.result == '') {
return;
}
jQuery('#mistake').show();
jQuery('#voice').hide();
ui.areaMsgList.value = resp.result[0];
},
error: function(xhr, type, errorThrown) {
if(type == 'timeout') {
pageUtils.showToast("录音超时");
} else {
pageUtils.showToast("网络请求出错");
}
}
});
}
//这里录音发送完成就不需要了,所以没有必要存在手机里,直接删除音频
function delVoiceFile() {
for(var i = 0; i < fileArr.length; i++) {
plus.io.resolveLocalFileSystemURL(fileArr[i], function(entry) {
if(entry.isFile) {
setTimeout(function() {
entry.remove(function(entry) {
fileArr.pop();
// pageUtils.showToast('删除成功');
}, function(e) {
// pageUtils.showToast('删除失败');
});
}, 500);
}
}, function(e) {
alert("Resolve file URL failed: " + e.message);
});
}
}
});
}(mui, document));
收起阅读 »

解决同时使用MUI下拉刷新、mui-PopPicker、mui-popover相互冲突的问题
分享一下我在开发应用时,遇到的一些问题的解决方法,不知道会不会给大家一些帮助。
如果您有更好的方法,也可以一起讨论。
在我开发的应用中,主要涉及到高级查询的操作,因为有更多的查询选项,我使用了mui-popover这个控件可进行弹出,然后,嵌入了一些查询表单和下拉列表的选择项。
下拉列表选择项,使用了mui-poppicker控件。在测试时,popover和poppicker控件在安卓上遮罩层会有问题,点击poppicker后,相互遮挡,并且页面上还启用了Mui的下拉刷新控件。
出现的问题:
1、在弹出poppicker选择下拉列表时,会触发下拉刷新的事件。
2、popover显示后,再触发poppicker后,遮罩层不能完全遮盖住popover,导致可以多次触发poppicker
解决方法:
解决问题1思路:
弹出poppicker选择下拉列表时,禁用下拉刷新功能,选择确定后再启用下拉刷新功能。
解决问题2思路:
popover显示后,如果触发poppicker控件,先隐藏popover,选择确定后再显示popover控件。
另外,为了创建下拉列表方便,我将poppicker控件封装了一个常用方法,可以直接调用。
以下是实现的代码:
var isActivePop; //POP刷新激活状态,解决下拉刷新冲突
mui.plusReady(function() {
isActivePop = false;
mui("#popWindow .mui-scroll-wrapper").scroll();
mui("body").on("shown", ".mui-popover", function(e) {
plus.webview.currentWebview().setPullToRefresh({
support: false
}, function() {});
isActivePop = true;
});
mui("body").on("hidden", ".mui-popover", function(e) {
if(isActivePop) {
plus.webview.currentWebview().setPullToRefresh({
support: true
}, function() {
// downRefresh(); 你自己的逻辑,我这里用的隐含刷新
});
mui("#refreshName").pullRefresh().pulldownLoading(); // 调用下拉刷新
}
isActivePop = false;
});
}
// 下拉刷新
function downRefresh() {
// 自己的逻辑处理
}
/**
* 获取选择列表 (返回值为表单input赋值)
* 使用时需要引用 mui.picker.all.js 和 mui.picker.all.css 文件
* @param {String} buttonId 触发及显示文本的id
* @param {String} dataId 数据表单value的id
* @param {JSONArray} data 格式为 [{ value: 'ywj', text: '董事长 叶XX' }]
* @param {String} selectedValue 为选中值 value
* @param {Function} _callbackBefore 确认前回调方法
* @param {Function} _callbackPull 确认后回调下拉方法
* @param {Function} _callbackExe 确认后执行回调方法
*/
function getSelect(buttonId, dataId, data, selectedValue, _callbackBefore, _callbackPull, _callbackExe) {
var userPicker = new mui.PopPicker();
userPicker.setData(data);
var resultText = document.getElementById(buttonId);
var resultValue = document.getElementById(dataId);
var mui_popover = mui(".mui-popover"); //获取页面上多个popover控件
//设置默认值
if(selectedValue != null && selectedValue != "") {
userPicker.pickers[0].setSelectedValue(selectedValue); //设置选中值value
resultText.value = userPicker.pickers[0].getSelectedText(); //获取当前取中值的文本text
resultValue.value = userPicker.pickers[0].getSelectedValue(); //获取当前取中值的value值给数据表单
}
resultText.removeEventListener('tap', function(event) {});
resultText.addEventListener('tap', function(event, selectedValue) {
var _isActivePop = (isActivePop == null)? false : isActivePop);
if(_isActivePop) {
isActivePop = false; //在隐藏前,关闭刷新状态
for(var i = 0; i < mui_popover.length; i++) {
mui(mui_popover[i]).popover("hide");
}
}
plus.webview.currentWebview().setPullToRefresh({
support: false,
}, function() {
if(_callbackBefore != null) _callbackBefore();
});
userPicker.show(function(items) {
resultValue.value = items[0].value;
resultText.value = items[0].text;
if(_isActivePop) {
for(var i = 0; i < mui_popover.length; i++) {
mui(mui_popover[i]).popover("show"); //处理页面上多个popover
}
isActivePop = true; //在显示后,开启刷新状态,为了能在POP正常HIDE后激活下拉刷新
}
plus.webview.currentWebview().setPullToRefresh({
support: true
}, function() {
if(_callbackPull != null) _callbackPull();
});
if(_callbackExe != null) _callbackExe();
});
}, false);
return userPicker;
}
第一次写,也自己记录一下方便以后查。
以上是我实现的一些解决办法,可能不是很好,JS水平也有限,大家可以一起来完善、提高,相互学习。
分享一下我在开发应用时,遇到的一些问题的解决方法,不知道会不会给大家一些帮助。
如果您有更好的方法,也可以一起讨论。
在我开发的应用中,主要涉及到高级查询的操作,因为有更多的查询选项,我使用了mui-popover这个控件可进行弹出,然后,嵌入了一些查询表单和下拉列表的选择项。
下拉列表选择项,使用了mui-poppicker控件。在测试时,popover和poppicker控件在安卓上遮罩层会有问题,点击poppicker后,相互遮挡,并且页面上还启用了Mui的下拉刷新控件。
出现的问题:
1、在弹出poppicker选择下拉列表时,会触发下拉刷新的事件。
2、popover显示后,再触发poppicker后,遮罩层不能完全遮盖住popover,导致可以多次触发poppicker
解决方法:
解决问题1思路:
弹出poppicker选择下拉列表时,禁用下拉刷新功能,选择确定后再启用下拉刷新功能。
解决问题2思路:
popover显示后,如果触发poppicker控件,先隐藏popover,选择确定后再显示popover控件。
另外,为了创建下拉列表方便,我将poppicker控件封装了一个常用方法,可以直接调用。
以下是实现的代码:
var isActivePop; //POP刷新激活状态,解决下拉刷新冲突
mui.plusReady(function() {
isActivePop = false;
mui("#popWindow .mui-scroll-wrapper").scroll();
mui("body").on("shown", ".mui-popover", function(e) {
plus.webview.currentWebview().setPullToRefresh({
support: false
}, function() {});
isActivePop = true;
});
mui("body").on("hidden", ".mui-popover", function(e) {
if(isActivePop) {
plus.webview.currentWebview().setPullToRefresh({
support: true
}, function() {
// downRefresh(); 你自己的逻辑,我这里用的隐含刷新
});
mui("#refreshName").pullRefresh().pulldownLoading(); // 调用下拉刷新
}
isActivePop = false;
});
}
// 下拉刷新
function downRefresh() {
// 自己的逻辑处理
}
/**
* 获取选择列表 (返回值为表单input赋值)
* 使用时需要引用 mui.picker.all.js 和 mui.picker.all.css 文件
* @param {String} buttonId 触发及显示文本的id
* @param {String} dataId 数据表单value的id
* @param {JSONArray} data 格式为 [{ value: 'ywj', text: '董事长 叶XX' }]
* @param {String} selectedValue 为选中值 value
* @param {Function} _callbackBefore 确认前回调方法
* @param {Function} _callbackPull 确认后回调下拉方法
* @param {Function} _callbackExe 确认后执行回调方法
*/
function getSelect(buttonId, dataId, data, selectedValue, _callbackBefore, _callbackPull, _callbackExe) {
var userPicker = new mui.PopPicker();
userPicker.setData(data);
var resultText = document.getElementById(buttonId);
var resultValue = document.getElementById(dataId);
var mui_popover = mui(".mui-popover"); //获取页面上多个popover控件
//设置默认值
if(selectedValue != null && selectedValue != "") {
userPicker.pickers[0].setSelectedValue(selectedValue); //设置选中值value
resultText.value = userPicker.pickers[0].getSelectedText(); //获取当前取中值的文本text
resultValue.value = userPicker.pickers[0].getSelectedValue(); //获取当前取中值的value值给数据表单
}
resultText.removeEventListener('tap', function(event) {});
resultText.addEventListener('tap', function(event, selectedValue) {
var _isActivePop = (isActivePop == null)? false : isActivePop);
if(_isActivePop) {
isActivePop = false; //在隐藏前,关闭刷新状态
for(var i = 0; i < mui_popover.length; i++) {
mui(mui_popover[i]).popover("hide");
}
}
plus.webview.currentWebview().setPullToRefresh({
support: false,
}, function() {
if(_callbackBefore != null) _callbackBefore();
});
userPicker.show(function(items) {
resultValue.value = items[0].value;
resultText.value = items[0].text;
if(_isActivePop) {
for(var i = 0; i < mui_popover.length; i++) {
mui(mui_popover[i]).popover("show"); //处理页面上多个popover
}
isActivePop = true; //在显示后,开启刷新状态,为了能在POP正常HIDE后激活下拉刷新
}
plus.webview.currentWebview().setPullToRefresh({
support: true
}, function() {
if(_callbackPull != null) _callbackPull();
});
if(_callbackExe != null) _callbackExe();
});
}, false);
return userPicker;
}
第一次写,也自己记录一下方便以后查。
以上是我实现的一些解决办法,可能不是很好,JS水平也有限,大家可以一起来完善、提高,相互学习。