HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

vue 项目移植到 uni-app 项目过程中通配选择器“*”的处理

通配

在小程序和App平台是不允许使用通配选择器的

不过在实际应用过程中可以曲线实现,比如使用伪类选择器 :not 替代

原始样式:

* {  
  opacity: 0.5  
}

替代样式:

:not(not) {  
  opacity: 0.5  
}

提示:由于通配选择器性能较差,项目中尽量减少通配选择器的使用

继续阅读 »

在小程序和App平台是不允许使用通配选择器的

不过在实际应用过程中可以曲线实现,比如使用伪类选择器 :not 替代

原始样式:

* {  
  opacity: 0.5  
}

替代样式:

:not(not) {  
  opacity: 0.5  
}

提示:由于通配选择器性能较差,项目中尽量减少通配选择器的使用

收起阅读 »

mui集合更换讯飞语音为百度语音识别的终极方法,超简单!都不用你写代码

h5+ 语音识别 百度语音识别 mui

网络中和官方都是在绕来绕去,造轮子不说,成功率不高,可操作性不强……

经过多次测试,发现一个终极解决方法,特别简单,如果你知道了肯定会脑海中无数动物飘过……

好了,那我就上代码了……

一、根据官方进行相关配置(配置语音权限、百度sdk申请key等)这里就不再重复了,一搜一大把

二、打开你的mui.js(或者mui.min.js),实际使用中你用哪个就打开哪个,千万别说你都用,大家会^_^你的

三.搜索代码“iFly”,更换为“baidu”

四、同步测试,打包后就可以了

怎么样,简单吧!是不是很懵逼……绕来绕去就这么简单就能解决

借鉴于:

继续阅读 »

网络中和官方都是在绕来绕去,造轮子不说,成功率不高,可操作性不强……

经过多次测试,发现一个终极解决方法,特别简单,如果你知道了肯定会脑海中无数动物飘过……

好了,那我就上代码了……

一、根据官方进行相关配置(配置语音权限、百度sdk申请key等)这里就不再重复了,一搜一大把

二、打开你的mui.js(或者mui.min.js),实际使用中你用哪个就打开哪个,千万别说你都用,大家会^_^你的

三.搜索代码“iFly”,更换为“baidu”

四、同步测试,打包后就可以了

怎么样,简单吧!是不是很懵逼……绕来绕去就这么简单就能解决

借鉴于:

收起阅读 »

uniapp离线打包白屏等问题,各种填坑记录

uniapp uniapp离线打包

做个简单的记录
1.白屏问题:
打算测试下uniapp的离线打包。
按照所有流程都处理了,appID也配置的一样,结果就是白屏,一直显示不出来。
后来发现src->main->res->layout里的文件没有删除。
里面是activity_main.xml.
安卓项目进入后的主页,context “.MainActivity”找不到,一直显示白屏。删掉后就好了。。。。

这个隐藏的这么深的。
之前一直以为是版本不对应,因为报错一直报低于14;都要搞哭了

2.登陆后,一直等不上去问题
在uniapp项目中,使用了个推,地图,视频流播放等功能,需要在libs里面讲用到的包都加上,不然会显示功能push 或者AMAP权限不全问题。

3.调用拍照,NFC等权限时,需要将安卓打包配置加在<application>之前

4.离线打包调试后,定位不显示问题;(使用的是高德地图)
参考链接:打包后地图定位不显示位置 http://ask.dcloud.net.cn/article/212
之前都是云打包,直接用的DCLOUD的证书,所以高德的SHA1使用的也是DCLOUD提供的;
用Android Studio 离线打包后,生成的自己的证书,所以SHA1也需要是自己的keystore。
参考链接 :
高德开发者文档生成SHA1
Android jks文件签名转换keystore文件签名

HBuilderX的appID绑定地图key时,需要安卓的applicationid一致。所以需要更改下Android Studio的build.gradle
内的applicationId 和HbuilderID一致。

继续阅读 »

做个简单的记录
1.白屏问题:
打算测试下uniapp的离线打包。
按照所有流程都处理了,appID也配置的一样,结果就是白屏,一直显示不出来。
后来发现src->main->res->layout里的文件没有删除。
里面是activity_main.xml.
安卓项目进入后的主页,context “.MainActivity”找不到,一直显示白屏。删掉后就好了。。。。

这个隐藏的这么深的。
之前一直以为是版本不对应,因为报错一直报低于14;都要搞哭了

2.登陆后,一直等不上去问题
在uniapp项目中,使用了个推,地图,视频流播放等功能,需要在libs里面讲用到的包都加上,不然会显示功能push 或者AMAP权限不全问题。

3.调用拍照,NFC等权限时,需要将安卓打包配置加在<application>之前

4.离线打包调试后,定位不显示问题;(使用的是高德地图)
参考链接:打包后地图定位不显示位置 http://ask.dcloud.net.cn/article/212
之前都是云打包,直接用的DCLOUD的证书,所以高德的SHA1使用的也是DCLOUD提供的;
用Android Studio 离线打包后,生成的自己的证书,所以SHA1也需要是自己的keystore。
参考链接 :
高德开发者文档生成SHA1
Android jks文件签名转换keystore文件签名

HBuilderX的appID绑定地图key时,需要安卓的applicationid一致。所以需要更改下Android Studio的build.gradle
内的applicationId 和HbuilderID一致。

收起阅读 »

接小程序,app,管理系统,uniapp,mui,vue项目

移动APP 小程序

本人从事互联网工作多年,目前成立安徽飞渔宝网络科技有限公司。本公司承接承接APP项目开发,小程序开发,web前端开发,经验丰富,有意私聊。
微信:qq605851570
QQ : 605851570
感恩各位老板合作!

本人从事互联网工作多年,目前成立安徽飞渔宝网络科技有限公司。本公司承接承接APP项目开发,小程序开发,web前端开发,经验丰富,有意私聊。
微信:qq605851570
QQ : 605851570
感恩各位老板合作!

uniapp在索尼手机上状态栏都有一条遮罩

状态栏

我已经无语了。uniapp没有单独设置状态栏颜色的方法,导致状态栏有一条灰色的遮罩,下载了官方的,还有其他人开发的app都有这种情况,wap2app都可以设置,怎么到uniapp就不行了

继续阅读 »

我已经无语了。uniapp没有单独设置状态栏颜色的方法,导致状态栏有一条灰色的遮罩,下载了官方的,还有其他人开发的app都有这种情况,wap2app都可以设置,怎么到uniapp就不行了

收起阅读 »

如何在H5中利用ChooseImg方法上传图片到七牛

众所周知:在H5中选择图片的时候,本地显示的图片地址是blob:http://XXXXXXXXXXXX,而不是像在小程序中的http://mx/XXXXXXXXXXXXXX,也就意味着我们并不能通过file的文件上传到服务器。

这个问题困扰了我很久,终于想到了方法。。。

首先我们不通过后台服务器去上传图片,而是直接以js(ajax)的方法上传图片。

首先我们建立一个需要上传选择图片的组件
<view class="uni-uploaderinput-box" v-show="hasUploadList.length < limit">
<view class="uni-uploader
input" @tap="chooseImage"></view>
</view>

然后处理 chooseImage的点击事件:

chooseImage: async function() {
var that = this;
if (that.hasUploadList.length === that.limit) {
return;
}
uni.chooseImage({
success(beforRes) {
for (var i = 0; i < beforRes.tempFiles.length; i++) {
var uploadFileName = beforRes.tempFiles[i].path;
// #ifdef H5
that.$connect.uploadFileToQiniuLocal(beforRes.tempFiles[i]).then((uploadRes) => {
//imageListTmp = that.imageList.concat(res.tempFilePaths) //非APP平台不支持自定义压缩,暂时没有处理,可通过uni-app上传组件的sizeType属性压缩
that.hasUploadList.push(uploadRes.urlPreview)
});
// #endif
// #ifndef H5
that.$connect.uploadFileToQiniu(res.tempFilePaths[i]).then((uploadRes) => {
console.log(uploadRes)
});
// #endif

                    }  

                }  
            })  
        },  

这里有一个很关键的因素:就是去获得qiniu上传的token。然而在这里有一个问题暂时没有办法解决,就是每次上传图片的blob都不一样(即使图片是同一个);
以下是上传图片的js方法
//非H5 使用
uploadFileToQiniu: async function(file, cb) {
const url = 'qiniu/uploadSingleFile';
const userid = 1;
const header = this.getFormHeader(userid, url, '');
return await new Promise((resolve, reject) => {
uni.uploadFile({
url: baseUrl + url,
// files: file,
filePath: file,
name: 'file',
header: header,
success: function(res) {
resolve(res.data)
}
})
})
},
//H5使用
uploadFileToQiniuLocal: async function(file, cb) {
let qiniuInit = await this.get('qiniu/GetUploadTokenForQiniu', {
md5: hexMD5(file.path),
filesize: file.size,
filetype: 'jpg'
});
let options = {
region: 'ECN', // 华北区
uptokenURL: qiniuInit.results.bucket,
uptoken: qiniuInit.results.uploadToken,
domain: qiniuInit.results.domain,
shouldUseQiniuFileName: true,
fileHead: 'file',
key: this.currentTime()
};
await qiniuUploader.init(options);
return await new Promise((resolve, reject) => {
qiniuUploader.upload(file.path, async (res) => {
resolve(res)
}, (error) => {
console.error('error: ' + JSON.stringify(error));
},
null,
(progress) => {
// console.log('上传进度', progress.progress)
// console.log('已经上传的数据长度', progress.totalBytesSent)
// console.log('预期需要上传的数据总长度', progress.totalBytesExpectedToSend)
});
})
}

调用上传的js文件我附件上传了,直接使用就可以了。

一切准备就绪之后,选择图片后自动会上传。

用我这个方法,会遇到几个问题:

1、由于上传的异步,可能显示图片的时候顺序会有所变化,具体的请编写完后尝试。
2、暂时不能做每页面上上传,不能做查重。。。还需要继续完善

继续阅读 »

众所周知:在H5中选择图片的时候,本地显示的图片地址是blob:http://XXXXXXXXXXXX,而不是像在小程序中的http://mx/XXXXXXXXXXXXXX,也就意味着我们并不能通过file的文件上传到服务器。

这个问题困扰了我很久,终于想到了方法。。。

首先我们不通过后台服务器去上传图片,而是直接以js(ajax)的方法上传图片。

首先我们建立一个需要上传选择图片的组件
<view class="uni-uploaderinput-box" v-show="hasUploadList.length < limit">
<view class="uni-uploader
input" @tap="chooseImage"></view>
</view>

然后处理 chooseImage的点击事件:

chooseImage: async function() {
var that = this;
if (that.hasUploadList.length === that.limit) {
return;
}
uni.chooseImage({
success(beforRes) {
for (var i = 0; i < beforRes.tempFiles.length; i++) {
var uploadFileName = beforRes.tempFiles[i].path;
// #ifdef H5
that.$connect.uploadFileToQiniuLocal(beforRes.tempFiles[i]).then((uploadRes) => {
//imageListTmp = that.imageList.concat(res.tempFilePaths) //非APP平台不支持自定义压缩,暂时没有处理,可通过uni-app上传组件的sizeType属性压缩
that.hasUploadList.push(uploadRes.urlPreview)
});
// #endif
// #ifndef H5
that.$connect.uploadFileToQiniu(res.tempFilePaths[i]).then((uploadRes) => {
console.log(uploadRes)
});
// #endif

                    }  

                }  
            })  
        },  

这里有一个很关键的因素:就是去获得qiniu上传的token。然而在这里有一个问题暂时没有办法解决,就是每次上传图片的blob都不一样(即使图片是同一个);
以下是上传图片的js方法
//非H5 使用
uploadFileToQiniu: async function(file, cb) {
const url = 'qiniu/uploadSingleFile';
const userid = 1;
const header = this.getFormHeader(userid, url, '');
return await new Promise((resolve, reject) => {
uni.uploadFile({
url: baseUrl + url,
// files: file,
filePath: file,
name: 'file',
header: header,
success: function(res) {
resolve(res.data)
}
})
})
},
//H5使用
uploadFileToQiniuLocal: async function(file, cb) {
let qiniuInit = await this.get('qiniu/GetUploadTokenForQiniu', {
md5: hexMD5(file.path),
filesize: file.size,
filetype: 'jpg'
});
let options = {
region: 'ECN', // 华北区
uptokenURL: qiniuInit.results.bucket,
uptoken: qiniuInit.results.uploadToken,
domain: qiniuInit.results.domain,
shouldUseQiniuFileName: true,
fileHead: 'file',
key: this.currentTime()
};
await qiniuUploader.init(options);
return await new Promise((resolve, reject) => {
qiniuUploader.upload(file.path, async (res) => {
resolve(res)
}, (error) => {
console.error('error: ' + JSON.stringify(error));
},
null,
(progress) => {
// console.log('上传进度', progress.progress)
// console.log('已经上传的数据长度', progress.totalBytesSent)
// console.log('预期需要上传的数据总长度', progress.totalBytesExpectedToSend)
});
})
}

调用上传的js文件我附件上传了,直接使用就可以了。

一切准备就绪之后,选择图片后自动会上传。

用我这个方法,会遇到几个问题:

1、由于上传的异步,可能显示图片的时候顺序会有所变化,具体的请编写完后尝试。
2、暂时不能做每页面上上传,不能做查重。。。还需要继续完善

收起阅读 »

centOS安装FFmpeg的方法,php截取上传视频的某一帧作为缩略图FFmpeg组件

yum install epel-release -y
yum update -y
rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm
yum install ffmpeg ffmpeg-devel -y
ffmpeg
git clone https://github.com/nilsringersma/ffmpeg-php # 下载ffmpeg-php的相关文件
cd ffmpeg-php # 转到 ffmpeg-php 的目录
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --enable-skip-gd-check # 配置
make # 编译 
make install # 安装
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/
修改php配置文件:vim /usr/local/php/etc/php.ini
加入这句:
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/ffmpeg.so
重启php-FPM :/etc/init.d/php-fpm restart
查看扩展安装情况:
php -m

继续阅读 »

yum install epel-release -y
yum update -y
rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm
yum install ffmpeg ffmpeg-devel -y
ffmpeg
git clone https://github.com/nilsringersma/ffmpeg-php # 下载ffmpeg-php的相关文件
cd ffmpeg-php # 转到 ffmpeg-php 的目录
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --enable-skip-gd-check # 配置
make # 编译 
make install # 安装
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/
修改php配置文件:vim /usr/local/php/etc/php.ini
加入这句:
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/ffmpeg.so
重启php-FPM :/etc/init.d/php-fpm restart
查看扩展安装情况:
php -m

收起阅读 »

uni-app大法好 ,nvue 从入坑到放弃

nvue

背景

APP上有一个顶部选项卡,切换列表的页面,该页面十分复杂
实际页面,可以看在线地址 https://beta.hongdan888.com/pages/competition/index

1 每个选项卡的列表数据能有400条
2 每个选项卡有两个弹窗筛选条件,多选或者多选
3 定时器,每10秒更新部分数据
4 实测在IOS上体验还可以,但是Android APP上比较卡顿。
5 本人对weex有一点了解,曾经想用他作为APP开发栈,但是感觉社区太冷清,运行起来各种问题,最终没敢用。
因此,考虑使用下nvue替换试试看。

目的

本文想告诉各位童鞋,不要轻易使用nvue,特别是复杂页面。虽然官方推荐复杂页面使用nvue性能更好,但是坑更不是一般的多。如果想尝试,先拿简单页面开刀!
笔者最终还是放弃了nvue,使用了uni-app

用到的组件

1 hello-uniapp中提供的 tab-nvue组件
2 自己开发的icon 、日历 、单选复选筛选组件
5 weex ui中的mask 、overlay组件

坑在哪里

tab-nvue组件坑。

1 tab-content中只能是list 作为根组件,也就是说tab-content中只能有list refresh header loading cell这几个组件 ,而我们页面上面有一个日历或者轮次筛选,本人尝试了放在header中或者fix定位,最终没有成功。
2 灵机一动,在list的tab-content上再新增一个tab-content放筛选组件,这次成功了,但是问题来了,两个tab-content各占了半屏。原因是tab-content组件默认设置了flex:1的样式。
3 最终tab-content算是搞定了,虽然切换起来,上下两个tab-content不太一致,但也还能接受。毕竟看起来流畅了很多。

icon坑

自己写的icon例子,在weex在线编辑器测试正常,但是一旦作为组件,就无法显示。 经历各种查文档后,算是搞定。可能单页运行和组件运行机制不一样。

mask弹窗的坑

1 弹窗内的数据发生更新时,在IOS上正常,但在Android上严重抖动。
2 原因,弹出默认位置 和传入的prop中的位置参数不一致。但是为什么数据变化,样式也重新渲染,这就搞不懂了。
3 这直接导致一个问题,组件没办法复用,除非弹出的位置大小都一致。

动画的坑

1 列表上有个比赛进行中的,时间闪烁效果,使用css transform,分分钟搞定
2 weex,css只支持大小位置的变化,只能使用animation 模块来实现。
3 但是animation 的动画只能运行一次,要一直闪现怎么破,想到使用定时器。
4 已经想骂娘了,想放弃了,一个简单的动画,还要搞个定时器每过几秒执行一次。
5 想过使用gif做图 ,但还是想再尝试看看

生命周期的坑

1 列表中有两个两个定时器,一个定时动画,一个定时获取数据。但是页面离开时,要销毁定时器,页面显示要再创建定时器。
2 weex官方提供了一个全局事件,说是可以监听APP前台、后台事件;一个通用事件(appear ,Disappear),监听页面可见不可见事件
3 本人实测,IOS上全局事件有效,Android无效; 通用事件无效。这时已经无解了。

点击事件的坑

  1. 连续点击,会触发多次,比如连点列次列表到详情,就会打开两次页面。
  2. 点击过快,不触发,在Android上点击总是时灵时不灵

全局变量的坑

  1. 据说weex不支持vuex,本人已经不想实测了
  2. 由于APP中有金币活动,可能会在任何一个页面弹出提示,weex如果不支持vuex,那这个功能又要想办法解决。

uni-app大法好

  1. 页面渲染不会抖动
  2. 组件开发简单
  3. css兼容性好
  4. 各类事件很全面
  5. 社区活跃
  6. 上次优点盖过性能缺点
继续阅读 »

背景

APP上有一个顶部选项卡,切换列表的页面,该页面十分复杂
实际页面,可以看在线地址 https://beta.hongdan888.com/pages/competition/index

1 每个选项卡的列表数据能有400条
2 每个选项卡有两个弹窗筛选条件,多选或者多选
3 定时器,每10秒更新部分数据
4 实测在IOS上体验还可以,但是Android APP上比较卡顿。
5 本人对weex有一点了解,曾经想用他作为APP开发栈,但是感觉社区太冷清,运行起来各种问题,最终没敢用。
因此,考虑使用下nvue替换试试看。

目的

本文想告诉各位童鞋,不要轻易使用nvue,特别是复杂页面。虽然官方推荐复杂页面使用nvue性能更好,但是坑更不是一般的多。如果想尝试,先拿简单页面开刀!
笔者最终还是放弃了nvue,使用了uni-app

用到的组件

1 hello-uniapp中提供的 tab-nvue组件
2 自己开发的icon 、日历 、单选复选筛选组件
5 weex ui中的mask 、overlay组件

坑在哪里

tab-nvue组件坑。

1 tab-content中只能是list 作为根组件,也就是说tab-content中只能有list refresh header loading cell这几个组件 ,而我们页面上面有一个日历或者轮次筛选,本人尝试了放在header中或者fix定位,最终没有成功。
2 灵机一动,在list的tab-content上再新增一个tab-content放筛选组件,这次成功了,但是问题来了,两个tab-content各占了半屏。原因是tab-content组件默认设置了flex:1的样式。
3 最终tab-content算是搞定了,虽然切换起来,上下两个tab-content不太一致,但也还能接受。毕竟看起来流畅了很多。

icon坑

自己写的icon例子,在weex在线编辑器测试正常,但是一旦作为组件,就无法显示。 经历各种查文档后,算是搞定。可能单页运行和组件运行机制不一样。

mask弹窗的坑

1 弹窗内的数据发生更新时,在IOS上正常,但在Android上严重抖动。
2 原因,弹出默认位置 和传入的prop中的位置参数不一致。但是为什么数据变化,样式也重新渲染,这就搞不懂了。
3 这直接导致一个问题,组件没办法复用,除非弹出的位置大小都一致。

动画的坑

1 列表上有个比赛进行中的,时间闪烁效果,使用css transform,分分钟搞定
2 weex,css只支持大小位置的变化,只能使用animation 模块来实现。
3 但是animation 的动画只能运行一次,要一直闪现怎么破,想到使用定时器。
4 已经想骂娘了,想放弃了,一个简单的动画,还要搞个定时器每过几秒执行一次。
5 想过使用gif做图 ,但还是想再尝试看看

生命周期的坑

1 列表中有两个两个定时器,一个定时动画,一个定时获取数据。但是页面离开时,要销毁定时器,页面显示要再创建定时器。
2 weex官方提供了一个全局事件,说是可以监听APP前台、后台事件;一个通用事件(appear ,Disappear),监听页面可见不可见事件
3 本人实测,IOS上全局事件有效,Android无效; 通用事件无效。这时已经无解了。

点击事件的坑

  1. 连续点击,会触发多次,比如连点列次列表到详情,就会打开两次页面。
  2. 点击过快,不触发,在Android上点击总是时灵时不灵

全局变量的坑

  1. 据说weex不支持vuex,本人已经不想实测了
  2. 由于APP中有金币活动,可能会在任何一个页面弹出提示,weex如果不支持vuex,那这个功能又要想办法解决。

uni-app大法好

  1. 页面渲染不会抖动
  2. 组件开发简单
  3. css兼容性好
  4. 各类事件很全面
  5. 社区活跃
  6. 上次优点盖过性能缺点
收起阅读 »

★★★★★寻找iOS马甲包技术大大长期合作★★★★★

APP马甲包上架的技术熟练工们,请听我说帮我做马甲包,做一个ios的包,摩托变汽车,帮我做马甲包上架,瞬间变高富帅,屌丝也能崛起。骗子请让一让。需要大量的熟练技术人才,有的话请和我联系。拿出你的技术就会有回报。?
所有的技术们请联系我 QQ 51286559

继续阅读 »

APP马甲包上架的技术熟练工们,请听我说帮我做马甲包,做一个ios的包,摩托变汽车,帮我做马甲包上架,瞬间变高富帅,屌丝也能崛起。骗子请让一让。需要大量的熟练技术人才,有的话请和我联系。拿出你的技术就会有回报。?
所有的技术们请联系我 QQ 51286559

收起阅读 »

透传消息

如何设置透传消息样式跟推送通知一样

如何设置透传消息样式跟推送通知一样

微擎 、 人人商城 打包原生App交流、【登录、支付、分享...】

微信支付 微信登录

人人商城 打包原生App交流、【登录、支付、分享...】

懂的大佬一起分享交流。给后生们带带路.

人人商城 打包原生App交流、【登录、支付、分享...】

懂的大佬一起分享交流。给后生们带带路.