HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

MUI框架制作红色精美的服装商城app界面模板

mui

一款基于MUI框架制作红色精美的服装商城app界面模板,也可以用来做手机移动端服装购物商城或其它主题商城模板。

下载地址:https://www.sucaihuo.com/templates/5871.html

继续阅读 »

一款基于MUI框架制作红色精美的服装商城app界面模板,也可以用来做手机移动端服装购物商城或其它主题商城模板。

下载地址:https://www.sucaihuo.com/templates/5871.html

收起阅读 »

触发事件`@longTap`和`@longpress`

支付宝小程序 微信小程序 uni_app

这两个都表示长按触发事件,那么这两个有啥区别呢?

经过实践,发现在微信和h5端只有longpress起效果,在支付宝小程序端只有longTap起效果,一开始做用了longpress,结果坑了支付宝,这两个还要用区分编译分开来写两套代码

我在想官方不能把不同环境的长按事件合成一个吗?还是有技术难题

继续阅读 »

这两个都表示长按触发事件,那么这两个有啥区别呢?

经过实践,发现在微信和h5端只有longpress起效果,在支付宝小程序端只有longTap起效果,一开始做用了longpress,结果坑了支付宝,这两个还要用区分编译分开来写两套代码

我在想官方不能把不同环境的长按事件合成一个吗?还是有技术难题

收起阅读 »

基于井通区块链的小游戏

HBuilderX uniapp

1、本程序使用HBuilderX工具开发
2、与井通接口对接,采集并解析数据展现给用户
3、使用uniapp,开发者编写一套代码,可编译到iOS、Android、H5、小程序等多个平台
4、本程序示例包含用户存储、与井通Api交互、与自开发程序交互、并提供开发基础组件和动画效果等功能

继续阅读 »

1、本程序使用HBuilderX工具开发
2、与井通接口对接,采集并解析数据展现给用户
3、使用uniapp,开发者编写一套代码,可编译到iOS、Android、H5、小程序等多个平台
4、本程序示例包含用户存储、与井通Api交互、与自开发程序交互、并提供开发基础组件和动画效果等功能

收起阅读 »

HBuilderX 通过mumu 模拟器调试 uni-app(win版)

HBuilderX

1.下载mumu模拟器

2.(可以忽略)查看mumu模拟器的端口(默认端口:7555):查找该文件:myandrovm_vbox86.nemu
C:\Program Files (x86)\MuMu\emulator\nemu\vms\myandrovm_vbox86\myandrovm_vbox86.nemu
打开文件:查找:adb
得到如图结果:

3.使用adb 连接接口。提示 adb 是无效命令:(。
提示“'adb' 不是内部或外部命令,也不是可运行程序或批处理文件

4.下载安装 Android SDK Tools(如果安装的时候无法进行下一步的话,需要安装JDK,JDK的配置需要百度一下。要不然会无法安装Tools)
4.1 安装的时候最好选择 【install for anyone using this computer】
下载地址:https://www.androiddevtools.cn/

5.将adb 命令配置到系统路径中去。
5.1系统变量:新建变量名:ANDROID_SDK_HOME
变量值:C:\Program Files (x86)\Android\android-sdk
如图:

5.2 系统变量下的path 添加两个变量值:
%ANDROID_SDK_HOME%\platform-tools
%ANDROID_SDK_HOME%\tools
如下图:

6.测试 adb
打开cmd,输入 adb。出现如下图就说明adb安装成功了。

7.Hbuilder 配置 adb(需要根据自己的安装路径进行配置。)
mumu模拟器的端口是:7555

8.运行:

报错:
java.net.ConnectException: Connection refused: connect
10:40:53.716 at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method)
10:40:53.717 at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
10:40:53.717 at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
10:40:53.717 at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
10:40:53.717 at java.net.PlainSocketImpl.connect(Unknown Source)
10:40:53.717 at java.net.SocksSocketImpl.connect(Unknown Source)
10:40:53.717 at java.net.Socket.connect(Unknown Source)
10:40:53.717 at java.net.Socket.connect(Unknown Source)
10:40:53.717 at java.net.Socket.<init>(Unknown Source)
10:40:53.717 at java.net.Socket.<init>(Unknown Source)
10:40:53.717 at com.pandora.console.core.ConsoleLauncher.main(ConsoleLauncher.java:41)

如果报错的话,重启HbuilderX 试试。
反正我是这么解决的:)

9.运行成功。

继续阅读 »

1.下载mumu模拟器

2.(可以忽略)查看mumu模拟器的端口(默认端口:7555):查找该文件:myandrovm_vbox86.nemu
C:\Program Files (x86)\MuMu\emulator\nemu\vms\myandrovm_vbox86\myandrovm_vbox86.nemu
打开文件:查找:adb
得到如图结果:

3.使用adb 连接接口。提示 adb 是无效命令:(。
提示“'adb' 不是内部或外部命令,也不是可运行程序或批处理文件

4.下载安装 Android SDK Tools(如果安装的时候无法进行下一步的话,需要安装JDK,JDK的配置需要百度一下。要不然会无法安装Tools)
4.1 安装的时候最好选择 【install for anyone using this computer】
下载地址:https://www.androiddevtools.cn/

5.将adb 命令配置到系统路径中去。
5.1系统变量:新建变量名:ANDROID_SDK_HOME
变量值:C:\Program Files (x86)\Android\android-sdk
如图:

5.2 系统变量下的path 添加两个变量值:
%ANDROID_SDK_HOME%\platform-tools
%ANDROID_SDK_HOME%\tools
如下图:

6.测试 adb
打开cmd,输入 adb。出现如下图就说明adb安装成功了。

7.Hbuilder 配置 adb(需要根据自己的安装路径进行配置。)
mumu模拟器的端口是:7555

8.运行:

报错:
java.net.ConnectException: Connection refused: connect
10:40:53.716 at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method)
10:40:53.717 at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
10:40:53.717 at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
10:40:53.717 at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
10:40:53.717 at java.net.PlainSocketImpl.connect(Unknown Source)
10:40:53.717 at java.net.SocksSocketImpl.connect(Unknown Source)
10:40:53.717 at java.net.Socket.connect(Unknown Source)
10:40:53.717 at java.net.Socket.connect(Unknown Source)
10:40:53.717 at java.net.Socket.<init>(Unknown Source)
10:40:53.717 at java.net.Socket.<init>(Unknown Source)
10:40:53.717 at com.pandora.console.core.ConsoleLauncher.main(ConsoleLauncher.java:41)

如果报错的话,重启HbuilderX 试试。
反正我是这么解决的:)

9.运行成功。

收起阅读 »

App包体积大小说明及模块选择注意

体积

uni-app的App引擎,默认有十几M的体积。
它比5+App体积大,因为它在自带一个小程序引擎,在Android上,还有一个独立的jscore。(iOS上使用了自带的jscore,不占用包体积。不过iOS的包,本身就比Android包大,这是iOS的编译原理导致的)

一般而言,开发者自己的代码压缩后应该在0.5-2M左右(不计图片)。所以整包一般是在15-20M之间。

uni-app除了基础引擎,还有很多可选原生插件、模块。打包时可以选择包含哪些模块,这也会影响包体积。
云打包在manifest的App模块配置中选择,离线打包在离线包里有一个excel表格,说明了模块清单,可自行选择要包含的模块。

如果在意体积,开发者可以在manifest去掉对intel cpu的支持,还可以减少几M的体积。intel的cpu在实际上很少见。

详见:App体积优化

继续阅读 »

uni-app的App引擎,默认有十几M的体积。
它比5+App体积大,因为它在自带一个小程序引擎,在Android上,还有一个独立的jscore。(iOS上使用了自带的jscore,不占用包体积。不过iOS的包,本身就比Android包大,这是iOS的编译原理导致的)

一般而言,开发者自己的代码压缩后应该在0.5-2M左右(不计图片)。所以整包一般是在15-20M之间。

uni-app除了基础引擎,还有很多可选原生插件、模块。打包时可以选择包含哪些模块,这也会影响包体积。
云打包在manifest的App模块配置中选择,离线打包在离线包里有一个excel表格,说明了模块清单,可自行选择要包含的模块。

如果在意体积,开发者可以在manifest去掉对intel cpu的支持,还可以减少几M的体积。intel的cpu在实际上很少见。

详见:App体积优化

收起阅读 »

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、暂时不能做每页面上上传,不能做查重。。。还需要继续完善

收起阅读 »