HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

关于HBuilder语法验证的建议

HBuilder

HBuilder自带的JS语法验证无法正常解析ES6的语法(比如箭头函数报错), 建议迁移到node插件eslint

HBuilder自带的JS语法验证无法正常解析ES6的语法(比如箭头函数报错), 建议迁移到node插件eslint

【分享】mui switch开关设置为只读效果

switch mui

昨天提问,没人啊没人,所谓的只读就是要求去除点击效果,只运行js后台操作。
研究了下Mui.js后,如下:

当然,希望官方加入readonly属性!

1.重新定义mui-disable,取消透明样式,当然也可以在这里改变switch的颜色background-color

        .mui-switch.mui-disabled{  
            opacity:99;  
        }

PS,改变颜色:

        .mui-switch.mui-active.mui-disabled{  
            background-color:#eac;  
            border-color:#eac;  
            opacity:99;  
        }

2.在需要的的switch处加入mui-disabled属性

                    <div id="sw1" class="mui-switch mui-active mui-disabled" >  
                        <div class="mui-switch-handle" ></div>  
                    </div>

3.在代码中复制toggle方法并hook掉原来的toggle

        mui.ready(function() {  
            mui("#sw1").switch().oldtoggle = mui("#sw1").switch().toggle;  
            mui("#sw1").switch().toggle = function(){  
            };  
        });

4.在需要后台js操作的地方,调用新的toggle就可以了,同时你会发现点击该switch会失去效果。

        function tg(){  
            mui("#sw1").switch().oldtoggle();  
        };

5.大概就像附件这样!欢迎加分。

继续阅读 »

昨天提问,没人啊没人,所谓的只读就是要求去除点击效果,只运行js后台操作。
研究了下Mui.js后,如下:

当然,希望官方加入readonly属性!

1.重新定义mui-disable,取消透明样式,当然也可以在这里改变switch的颜色background-color

        .mui-switch.mui-disabled{  
            opacity:99;  
        }

PS,改变颜色:

        .mui-switch.mui-active.mui-disabled{  
            background-color:#eac;  
            border-color:#eac;  
            opacity:99;  
        }

2.在需要的的switch处加入mui-disabled属性

                    <div id="sw1" class="mui-switch mui-active mui-disabled" >  
                        <div class="mui-switch-handle" ></div>  
                    </div>

3.在代码中复制toggle方法并hook掉原来的toggle

        mui.ready(function() {  
            mui("#sw1").switch().oldtoggle = mui("#sw1").switch().toggle;  
            mui("#sw1").switch().toggle = function(){  
            };  
        });

4.在需要后台js操作的地方,调用新的toggle就可以了,同时你会发现点击该switch会失去效果。

        function tg(){  
            mui("#sw1").switch().oldtoggle();  
        };

5.大概就像附件这样!欢迎加分。

收起阅读 »

使用mui的索引列表demo,动态加载,修改为通讯录联系人。

因公司需要,本人从安卓开发转战h5开发,若有不对指出,请指出,请勿喷!这是我在自学过程,开发公司项目遇到的问题。
按照之前论坛已经有大神给出 修改 mui.indexedlist.js对应部分为
init: function(holder, options) {
var self = this;
mui.ajax('url', {//
data: {
},
dataType: 'json', //服务器返回json格式数据
type: 'post', //HTTP请求类型
timeout: 10000, //超时时间设置为10秒;
success: function(data) {
var table = document.body.querySelector('.mui-table-view');
var html="",
for (var i = 0; i < data.length; i++) {
//插入数据
html= "你需要的数据";
}
table.innerHTML = html;
self.init1(holder, options);
},
error: function(xhr, type, errorThrown) {
console.log(type);
}
});
},
init1: function(holder, options) {
var self = this;
self.options = options || {};
self.box = holder;
if (!self.box) {
throw "实例 IndexedList 时需要指定 element";
}
self.createDom();
self.findElements();
self.caleLayout();
self.bindEvent();
},

即可发现数据就加载列表上了。 如果你的 数据源 已经安装 字母顺序分好类 ,按照demo 中 分别将数据 添加到对应的
<li data-group="A" class="mui-table-view-divider mui-indexed-list-group">A</li>   下面即可。
如果数据源没有进行分类,例如数据源如下格式:{"cRealName":"XX","cTelephoneNumber":"137xxxxxxxxx","cDepartmentName":"董事长办公室"}
这是项目中后台给我返回的数据源。 几经周折我如下 修改 完成项目需求。
var table = document.body.querySelector('.mui-table-view');
var htmla=""; //一个字母创建一个 ,即可
var b=0,a=0;//
for (var i = 0; i < data.length; i++) {
//插入数据
var s=makePy(data[i].cRealName)+"";//此方法为 将返回的姓名 转为 大写首字母缩写 ,百度即可 如 李二 转为LR
var shouzimu=s.substr(0, 1); //此方法获取 首字母 。
//首字母 为 A的
if(shouzimu=="A"){
if (a==0) {
htmla += '<li data-group="A" class="mui-table-view-divider mui-indexed-list-group">A</li> <li data-value='+s+ 'data-tags='+s+' class="mui-table-view-cell mui-indexed-list-item">'+data[i].cRealName+'</li>';
a=a+1;
} else{
htmla +='<li data-value='+s+ 'data-tags='+s+' class="mui-table-view-cell mui-indexed-list-item">'+data[i].cRealName+'</li>';
}
} 
}
table.innerHTML = htmla;//要按照 字母顺序添加 对应字母的 字符串即可
self.init1(holder, options);
这样不管数据源如何返回 都会按照首字母 排序下来。

继续阅读 »

因公司需要,本人从安卓开发转战h5开发,若有不对指出,请指出,请勿喷!这是我在自学过程,开发公司项目遇到的问题。
按照之前论坛已经有大神给出 修改 mui.indexedlist.js对应部分为
init: function(holder, options) {
var self = this;
mui.ajax('url', {//
data: {
},
dataType: 'json', //服务器返回json格式数据
type: 'post', //HTTP请求类型
timeout: 10000, //超时时间设置为10秒;
success: function(data) {
var table = document.body.querySelector('.mui-table-view');
var html="",
for (var i = 0; i < data.length; i++) {
//插入数据
html= "你需要的数据";
}
table.innerHTML = html;
self.init1(holder, options);
},
error: function(xhr, type, errorThrown) {
console.log(type);
}
});
},
init1: function(holder, options) {
var self = this;
self.options = options || {};
self.box = holder;
if (!self.box) {
throw "实例 IndexedList 时需要指定 element";
}
self.createDom();
self.findElements();
self.caleLayout();
self.bindEvent();
},

即可发现数据就加载列表上了。 如果你的 数据源 已经安装 字母顺序分好类 ,按照demo 中 分别将数据 添加到对应的
<li data-group="A" class="mui-table-view-divider mui-indexed-list-group">A</li>   下面即可。
如果数据源没有进行分类,例如数据源如下格式:{"cRealName":"XX","cTelephoneNumber":"137xxxxxxxxx","cDepartmentName":"董事长办公室"}
这是项目中后台给我返回的数据源。 几经周折我如下 修改 完成项目需求。
var table = document.body.querySelector('.mui-table-view');
var htmla=""; //一个字母创建一个 ,即可
var b=0,a=0;//
for (var i = 0; i < data.length; i++) {
//插入数据
var s=makePy(data[i].cRealName)+"";//此方法为 将返回的姓名 转为 大写首字母缩写 ,百度即可 如 李二 转为LR
var shouzimu=s.substr(0, 1); //此方法获取 首字母 。
//首字母 为 A的
if(shouzimu=="A"){
if (a==0) {
htmla += '<li data-group="A" class="mui-table-view-divider mui-indexed-list-group">A</li> <li data-value='+s+ 'data-tags='+s+' class="mui-table-view-cell mui-indexed-list-item">'+data[i].cRealName+'</li>';
a=a+1;
} else{
htmla +='<li data-value='+s+ 'data-tags='+s+' class="mui-table-view-cell mui-indexed-list-item">'+data[i].cRealName+'</li>';
}
} 
}
table.innerHTML = htmla;//要按照 字母顺序添加 对应字母的 字符串即可
self.init1(holder, options);
这样不管数据源如何返回 都会按照首字母 排序下来。

收起阅读 »

HBuilder使用逍遥安卓模拟器进行调式

模拟器 HBuilder

第一次使用的模拟器是逍遥安卓模拟器,之后也几乎试过市面所有模拟器,最后还是觉得逍遥模拟器好用,可能是先入为主的原因。
最近正在学习android开发,由于没有基础,学起来很吃力。。。某程序媛推荐我学习html5这种模式。
然后了解到dcloud和apicloud 、额,然后看了http://dcloud.io/150604/index.html 决定还是入坑dcloud
我不太喜欢连着手机调式,看了官方的模拟器使用文档,好长好长,看完也不知道怎么下手。

废话说完,开始正事

> 1. 第一步
下载安装逍遥模拟器

第二步、
打开HBuilder安装目录找到tools文件夹

> 第二步、
打开tools文件夹

> 复制 adb.exe AdbWinApi.dll AdbWinUsbApi.dll 到逍遥安卓模拟器安装目录MEmu文件夹下覆盖之

> 第三步、
启动逍遥模拟器
1、找到“设置”
2、找到“关于平板电脑”(或者关于手机)并点击进入
3、找到 “版本号”
4、鼠标连续点击“版本号”选项
5、会弹出一段文字提醒,直到提醒次数为0后。结束点击。
6、返回“设置界面”,滑动到最底部,就可以看到 “开发者选项”已经打开

> 第四步、
进入开发者选项
把usb调式打上勾选

> 第五步、
启动/重启 HBuilder

工具》选项》HBuilder》内置WEB服务器 》端口我设置为 8020-21503

> 确定保存。重启 HBuilder

启动模拟器。

打开模拟器安装目录,双击击adb.exe

回到HBuilder,点击如图即可

继续阅读 »

第一次使用的模拟器是逍遥安卓模拟器,之后也几乎试过市面所有模拟器,最后还是觉得逍遥模拟器好用,可能是先入为主的原因。
最近正在学习android开发,由于没有基础,学起来很吃力。。。某程序媛推荐我学习html5这种模式。
然后了解到dcloud和apicloud 、额,然后看了http://dcloud.io/150604/index.html 决定还是入坑dcloud
我不太喜欢连着手机调式,看了官方的模拟器使用文档,好长好长,看完也不知道怎么下手。

废话说完,开始正事

> 1. 第一步
下载安装逍遥模拟器

第二步、
打开HBuilder安装目录找到tools文件夹

> 第二步、
打开tools文件夹

> 复制 adb.exe AdbWinApi.dll AdbWinUsbApi.dll 到逍遥安卓模拟器安装目录MEmu文件夹下覆盖之

> 第三步、
启动逍遥模拟器
1、找到“设置”
2、找到“关于平板电脑”(或者关于手机)并点击进入
3、找到 “版本号”
4、鼠标连续点击“版本号”选项
5、会弹出一段文字提醒,直到提醒次数为0后。结束点击。
6、返回“设置界面”,滑动到最底部,就可以看到 “开发者选项”已经打开

> 第四步、
进入开发者选项
把usb调式打上勾选

> 第五步、
启动/重启 HBuilder

工具》选项》HBuilder》内置WEB服务器 》端口我设置为 8020-21503

> 确定保存。重启 HBuilder

启动模拟器。

打开模拟器安装目录,双击击adb.exe

回到HBuilder,点击如图即可

收起阅读 »

用了mui后不调用android的复制了,网给的重写-webkit-user-select: text方法也不行

用了mui后不调用android的复制了,网给的重写-webkit-user-select: text方法也不行

用了mui后不调用android的复制了,网给的重写-webkit-user-select: text方法也不行

【公告】关于mac10.12系统下首次启动提示找不到jvm、actionSheet 安卓样式错乱、iOS 10真机运行、提示PHP等问题的公告

php大纲 iOS10 公告
  1. Mac10.12系统目前仍不是很稳定,刚解压完的HBuilder启动时会报找到不到jvm环境。
    原因是mac10.12系统提供的api无法正确获取刚解压完毕文件的路径。我们的工程师正在努力找解决方案。出现此问题的开发者请将解压后的HBuilder复制到别的目录就可以正常打开了。

  2. HBuilder 7.5.0的android版本产生了actionSheet 样式错乱问题,该问题已经在最新的7.5.1版本修复。有此问题者请升级到此版本

  3. HBuilder 7.5.0 已解决PC版的iOS10无法真机运行问题,Mac版暂未解决,大家可以使用xcode模拟器调试
    更新后如无法使用请
    ①请在工具-插件安装中,安装iOS链接插件,如已安装请卸载后重新安装,重启HBuilder并重试
    ②检查是否安装有老版本的iTools,如有安装,请升级到最新版,未安装则无需处理

  4. HBuilder7.4.2版出现的php文件无法使用大纲、无法使用alt+左键转到函数/变量定义等问题。
    HBuilder 7.5.0已修复该问题,有此问题者请升级到此版本

如果想退回到历史版本,可以在官网下载界面下方点击历史版本链接。
注意HBuilder的历史版本里自带的真机运行基座都是严格的历史版本,但云端打包的引擎并不是严格和HBuilder历史版本对应的老版打包机,某些版本在云端打包机并不存在,此时会切换为使用最新版本打包。使用plus.runtime可以查看引擎版本。

  1. HBuilder7.5之后提供的plus api提前生效方案对性能优化很重要,推荐阅读专题文章http://ask.dcloud.net.cn/article/921
继续阅读 »
  1. Mac10.12系统目前仍不是很稳定,刚解压完的HBuilder启动时会报找到不到jvm环境。
    原因是mac10.12系统提供的api无法正确获取刚解压完毕文件的路径。我们的工程师正在努力找解决方案。出现此问题的开发者请将解压后的HBuilder复制到别的目录就可以正常打开了。

  2. HBuilder 7.5.0的android版本产生了actionSheet 样式错乱问题,该问题已经在最新的7.5.1版本修复。有此问题者请升级到此版本

  3. HBuilder 7.5.0 已解决PC版的iOS10无法真机运行问题,Mac版暂未解决,大家可以使用xcode模拟器调试
    更新后如无法使用请
    ①请在工具-插件安装中,安装iOS链接插件,如已安装请卸载后重新安装,重启HBuilder并重试
    ②检查是否安装有老版本的iTools,如有安装,请升级到最新版,未安装则无需处理

  4. HBuilder7.4.2版出现的php文件无法使用大纲、无法使用alt+左键转到函数/变量定义等问题。
    HBuilder 7.5.0已修复该问题,有此问题者请升级到此版本

如果想退回到历史版本,可以在官网下载界面下方点击历史版本链接。
注意HBuilder的历史版本里自带的真机运行基座都是严格的历史版本,但云端打包的引擎并不是严格和HBuilder历史版本对应的老版打包机,某些版本在云端打包机并不存在,此时会切换为使用最新版本打包。使用plus.runtime可以查看引擎版本。

  1. HBuilder7.5之后提供的plus api提前生效方案对性能优化很重要,推荐阅读专题文章http://ask.dcloud.net.cn/article/921
收起阅读 »

成功集成阿里百川IM即时通讯并上线应用.

IM HTML5

一直想集成一套成熟的即时通讯在项目中,毕竟使用H5已经两年了,自己也写了很多实际的应用,接下来给大家分享下集成阿里IM时所见,让大家在集成过程中少走弯路。

1、选择IM通信服务商
一开始在选择阶段了解了很多市场上的比如像野狗、融云等产品,这些产品都有很完善的DEMO和接入方式,服务支持也特别的好,才注册立马就有服务电话进来,可最终我还是选择了阿里,主要原因阿里所提供的第三方服务产品一体化比较完善、例如我们使用了云账号解决的tonken的权限时效验证问题、放弃了以前使用的个推换成的阿里的推送服务用来解决IM过程的推送问题,特别关注的就是提供的电商服务没准以后某个项目真的用到了呢? 最后一点很重要现阶段IM完全免费.... 实际测试起来运行很顺畅,也很稳定.

2、搭建过程

  1. 创建应用并申请相关服务(推送、云账号、IM服务申请基本是秒审核) http://baichuan.taobao.com/
  2. 搭建IM通信过程中的图片、语音文件服务器,阿里仅提供了文字和图片的存储,想想看还不如自己搭建一套存储服务器呢,其实就是简单的图片上传、语音存储功能,语音文件在Android和IOS平台互转遇到了问题,解决可见 http://ask.dcloud.net.cn/article/841
    3.下载阿里SDK,构建服务端推送和聊天消息监控,集成云账号,提供TOKEN验证功能。SDK可在阿里管理后台中下载,文档和接口测试工具:http://open.taobao.com/apitools/apiTools.htm?spm=a219a.7395905.0.0.CO4f4r&catId=1&apiId=24819&apiName=taobao.open.account.delete&scopeId=
    4.构建H5页面,聊天列表页面和聊天页面,这一块可以说花费了很长的时间在做调试和稳定性控制,很重要的一点 所有的SDK请求请在一个常存页面调用,包括登陆、获取历史联系人、获取历史聊天信息、获取未阅读数量、消息监听及登出。我是放在了消息列表页面来处理这些事情。
    5.所有的消息仅用了文本类型(包括图片和语音消息),比如图片我使用了一个特殊标记符(ALIIMG:),在消息装载时特殊处理装载。
    6.调试稳定,因为实际运行过程中因网络环境变化、应用程序强制退出等等,需要构建完善的监听方法、前后切入方法,保证IM通信正常。

大家在接入过程中遇到什么问题可留言给我~

贴一下最终的效果吧:

继续阅读 »

一直想集成一套成熟的即时通讯在项目中,毕竟使用H5已经两年了,自己也写了很多实际的应用,接下来给大家分享下集成阿里IM时所见,让大家在集成过程中少走弯路。

1、选择IM通信服务商
一开始在选择阶段了解了很多市场上的比如像野狗、融云等产品,这些产品都有很完善的DEMO和接入方式,服务支持也特别的好,才注册立马就有服务电话进来,可最终我还是选择了阿里,主要原因阿里所提供的第三方服务产品一体化比较完善、例如我们使用了云账号解决的tonken的权限时效验证问题、放弃了以前使用的个推换成的阿里的推送服务用来解决IM过程的推送问题,特别关注的就是提供的电商服务没准以后某个项目真的用到了呢? 最后一点很重要现阶段IM完全免费.... 实际测试起来运行很顺畅,也很稳定.

2、搭建过程

  1. 创建应用并申请相关服务(推送、云账号、IM服务申请基本是秒审核) http://baichuan.taobao.com/
  2. 搭建IM通信过程中的图片、语音文件服务器,阿里仅提供了文字和图片的存储,想想看还不如自己搭建一套存储服务器呢,其实就是简单的图片上传、语音存储功能,语音文件在Android和IOS平台互转遇到了问题,解决可见 http://ask.dcloud.net.cn/article/841
    3.下载阿里SDK,构建服务端推送和聊天消息监控,集成云账号,提供TOKEN验证功能。SDK可在阿里管理后台中下载,文档和接口测试工具:http://open.taobao.com/apitools/apiTools.htm?spm=a219a.7395905.0.0.CO4f4r&catId=1&apiId=24819&apiName=taobao.open.account.delete&scopeId=
    4.构建H5页面,聊天列表页面和聊天页面,这一块可以说花费了很长的时间在做调试和稳定性控制,很重要的一点 所有的SDK请求请在一个常存页面调用,包括登陆、获取历史联系人、获取历史聊天信息、获取未阅读数量、消息监听及登出。我是放在了消息列表页面来处理这些事情。
    5.所有的消息仅用了文本类型(包括图片和语音消息),比如图片我使用了一个特殊标记符(ALIIMG:),在消息装载时特殊处理装载。
    6.调试稳定,因为实际运行过程中因网络环境变化、应用程序强制退出等等,需要构建完善的监听方法、前后切入方法,保证IM通信正常。

大家在接入过程中遇到什么问题可留言给我~

贴一下最终的效果吧:

收起阅读 »

关于本次软件更新后PHP文件无法提示自定义函数以及函数定位功能失效的解决方法。

① 右击打开的文件
② 选择最下面的(首选项)
③ 选择左边的(编辑器)不是(文本编辑器)
④ 选择右边的第一行的蓝色“文件关联”
⑤ 在上面的框(文件类型)中找到php选中
⑥ 在下面的框(相关联的编辑器)中找到 PHP Editor(Aptana) 选中,然后点击一下旁边的 (缺省值)按钮
⑦ 点击最下方的确定

然后你就发现,以前的又回来了

继续阅读 »

① 右击打开的文件
② 选择最下面的(首选项)
③ 选择左边的(编辑器)不是(文本编辑器)
④ 选择右边的第一行的蓝色“文件关联”
⑤ 在上面的框(文件类型)中找到php选中
⑥ 在下面的框(相关联的编辑器)中找到 PHP Editor(Aptana) 选中,然后点击一下旁边的 (缺省值)按钮
⑦ 点击最下方的确定

然后你就发现,以前的又回来了

收起阅读 »

关于表单提交像jquery的serialize()那样序列化处理表单的一个方法

input

只能说是接近,不能完整的处理。

    mui(".类名").on("tap","button",function () {  
        var temp=document.querySelectorAll("input[type=text]");//取得指定类型input数据  
        var data=[];  
        for(var i=0;i<temp.length;i++){  
            data[i]=temp[i].name+':'+temp[i].value;//构建数组  
        }  
        data.push('sex:'+document.querySelector('[name="sex"]:checked').value);//针对单选进行捕获值并重置数组中单选数据  
        //数组构建完成,下一步就是提交或者做其他处理了。  
        mui.post('后端地址',{data:JSON.stringify(data)},function(data){  
            //返回结果处理  
        },'json');  
    });

供参考,如果表单项比较多的话。不多还是单个单个获取吧

继续阅读 »

只能说是接近,不能完整的处理。

    mui(".类名").on("tap","button",function () {  
        var temp=document.querySelectorAll("input[type=text]");//取得指定类型input数据  
        var data=[];  
        for(var i=0;i<temp.length;i++){  
            data[i]=temp[i].name+':'+temp[i].value;//构建数组  
        }  
        data.push('sex:'+document.querySelector('[name="sex"]:checked').value);//针对单选进行捕获值并重置数组中单选数据  
        //数组构建完成,下一步就是提交或者做其他处理了。  
        mui.post('后端地址',{data:JSON.stringify(data)},function(data){  
            //返回结果处理  
        },'json');  
    });

供参考,如果表单项比较多的话。不多还是单个单个获取吧

收起阅读 »

《ECMAScript 6 入门》离线APP

项目介绍

  1. 项目源码
    2.安卓已通过百度应用分发到对应商店,搜索“ES6入门”即可下载(IOS的没有开发者账号,上线无期)

    应用技术

    mui&&html5+&&部分ES6语法

    致谢

    感谢阮一峰老师全书开源《ECMAScript 6 入门》哦!

继续阅读 »

项目介绍

  1. 项目源码
    2.安卓已通过百度应用分发到对应商店,搜索“ES6入门”即可下载(IOS的没有开发者账号,上线无期)

    应用技术

    mui&&html5+&&部分ES6语法

    致谢

    感谢阮一峰老师全书开源《ECMAScript 6 入门》哦!

收起阅读 »

分享个自己做的小APP,很适合初学者入门哦

项目源码

infoapp

安卓下载地址

应用宝-InfoApp

实现功能

1.登录页面使用第三方登录授权;
2.支持上拉加载,下拉刷新;
3.支持左右翻页;
4.支持页面预加载提升页面渲染速度,实现堪比原生APP的渲染效果。

用途

1.前端作品展示;
2.mui及html5+初学者入门参考!

截图

1 2 3 4

继续阅读 »

项目源码

infoapp

安卓下载地址

应用宝-InfoApp

实现功能

1.登录页面使用第三方登录授权;
2.支持上拉加载,下拉刷新;
3.支持左右翻页;
4.支持页面预加载提升页面渲染速度,实现堪比原生APP的渲染效果。

用途

1.前端作品展示;
2.mui及html5+初学者入门参考!

截图

1 2 3 4

收起阅读 »

关于采用localResizeIMG压缩成base64上传图片出现base64代码受损的问题的解决方案

base64 ajax 图片压缩 上传

为客户开发触屏版的头像上传功能时遇到这个问题,这个问题困扰了好几天。反复的打印localResizeIMG压缩后的base64的代码和通过mui.post方法提交到后端的base64数据。然后通过比对发现post过来的base64代码和localResizeIMG压缩过的能显示的base64代码是有差异的。主要是差别如下:

localResizeIMG的base64代码中是 +/ 而post到后端打印出来的是 + 也就是说部分+/ 被替换成+了。具体的问题没有再深入研究。这个情况遇到问题是,如果图片比较小都没问题,如果原始图片超过比如500kb(这个和localResizeIMG压缩比例有关系,这里就因人而异了),就容易出现上传到后台的图片是不完整的,有损的。甚至是黑图。

OK,解决方法来了。
在post之前,将base64的代码转成数组。如下:

    mui(".member_from").on("tap","button",function () {  
        var avatar_size = document.getElementById("avatar_photo").value;  
        var avatar = document.getElementById("avatar_show").src;  
        avatar = avatar.split("/");  
        mui.post('后端地址',{avatar:avatar,imgsize:avatar_size},function(data){  
            if (data.state==false) mui.alert('原因是什么什么什么', '操作失败!');   
        },'json');  
    });

后端处理。这个做开发的就很容易了。一句话的问题:

    $base64_image_contents = $_POST["avatars"];//提交过来的是数组  
    $base64_image_content=implode('/',$base64_image_contents);//数组转成字符串

后面base64转图片的这个就不发了。坛子里很多,搜下大把。

不知道是不是图片太大,造成base64代码过大而造成的图片受损的问题。总之,这个解决方案轻松搞定很多大图。

继续阅读 »

为客户开发触屏版的头像上传功能时遇到这个问题,这个问题困扰了好几天。反复的打印localResizeIMG压缩后的base64的代码和通过mui.post方法提交到后端的base64数据。然后通过比对发现post过来的base64代码和localResizeIMG压缩过的能显示的base64代码是有差异的。主要是差别如下:

localResizeIMG的base64代码中是 +/ 而post到后端打印出来的是 + 也就是说部分+/ 被替换成+了。具体的问题没有再深入研究。这个情况遇到问题是,如果图片比较小都没问题,如果原始图片超过比如500kb(这个和localResizeIMG压缩比例有关系,这里就因人而异了),就容易出现上传到后台的图片是不完整的,有损的。甚至是黑图。

OK,解决方法来了。
在post之前,将base64的代码转成数组。如下:

    mui(".member_from").on("tap","button",function () {  
        var avatar_size = document.getElementById("avatar_photo").value;  
        var avatar = document.getElementById("avatar_show").src;  
        avatar = avatar.split("/");  
        mui.post('后端地址',{avatar:avatar,imgsize:avatar_size},function(data){  
            if (data.state==false) mui.alert('原因是什么什么什么', '操作失败!');   
        },'json');  
    });

后端处理。这个做开发的就很容易了。一句话的问题:

    $base64_image_contents = $_POST["avatars"];//提交过来的是数组  
    $base64_image_content=implode('/',$base64_image_contents);//数组转成字符串

后面base64转图片的这个就不发了。坛子里很多,搜下大把。

不知道是不是图片太大,造成base64代码过大而造成的图片受损的问题。总之,这个解决方案轻松搞定很多大图。

收起阅读 »