HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

uni APP自动更新并安装

data:function(){  
            return{  
                version:1  
            }  
        },  
onLoad: function () {     
            uni.getSystemInfo({  
                success:(res) => {  
                    console.log(res.platform);  
                    //检测当前平台,如果是安卓则启动安卓更新  
                    if(res.platform=="android"){  
                        this.AndroidCheckUpdate();  
                    }  
                }  
            })  
        },  
        methods: {  
            AndroidCheckUpdate:function(){  
                var _this=this;  
                uni.request({  
                    url: 'http://xxxx.com/version.txt',  
                    method: 'GET',  
                    data: {},  
                    success: res => {  
                        if(res.data>this.version){  
                            if(plus.networkinfo.getCurrentType()!=3){  
                                uni.showToast({  
                                    title: '有新的版本发布,检测到您目前非Wifi连接,为节约您的流量,程序已停止自动更新,将在您连接WIFI之后重新检测更新。',  
                                    mask: false,  
                                    duration: 5000,  
                                    icon:"none"  
                                });  
                                return;  
                            }  
                            uni.showToast({  
                                title: '有新的版本发布,检测到您目前为Wifi连接,程序已启动自动更新。新版本下载完成后将自动弹出安装程序。',  
                                mask: false,  
                                duration: 5000,  
                                icon:"none"  
                            });  
                            var dtask = plus.downloader.createDownload( "http://xxxx.com/app.apk", {}, function ( d, status ) {  
                                    // 下载完成  
                                    if ( status == 200 ) {   
                                        plus.runtime.install(plus.io.convertLocalFileSystemURL(d.filename),{},{},function(error){  
                                            uni.showToast({  
                                                title: '安装失败',  
                                                mask: false,  
                                                duration: 1500  
                                            });  
                                        })  
                                    } else {  
                                         uni.showToast({  
                                            title: '更新失败',  
                                            mask: false,  
                                            duration: 1500  
                                         });  
                                    }    
                                });  
                            dtask.start();   
                        }  
                    },  
                    fail: () => {},  
                    complete: () => {}  
                });  
            },  
        }
继续阅读 »
data:function(){  
            return{  
                version:1  
            }  
        },  
onLoad: function () {     
            uni.getSystemInfo({  
                success:(res) => {  
                    console.log(res.platform);  
                    //检测当前平台,如果是安卓则启动安卓更新  
                    if(res.platform=="android"){  
                        this.AndroidCheckUpdate();  
                    }  
                }  
            })  
        },  
        methods: {  
            AndroidCheckUpdate:function(){  
                var _this=this;  
                uni.request({  
                    url: 'http://xxxx.com/version.txt',  
                    method: 'GET',  
                    data: {},  
                    success: res => {  
                        if(res.data>this.version){  
                            if(plus.networkinfo.getCurrentType()!=3){  
                                uni.showToast({  
                                    title: '有新的版本发布,检测到您目前非Wifi连接,为节约您的流量,程序已停止自动更新,将在您连接WIFI之后重新检测更新。',  
                                    mask: false,  
                                    duration: 5000,  
                                    icon:"none"  
                                });  
                                return;  
                            }  
                            uni.showToast({  
                                title: '有新的版本发布,检测到您目前为Wifi连接,程序已启动自动更新。新版本下载完成后将自动弹出安装程序。',  
                                mask: false,  
                                duration: 5000,  
                                icon:"none"  
                            });  
                            var dtask = plus.downloader.createDownload( "http://xxxx.com/app.apk", {}, function ( d, status ) {  
                                    // 下载完成  
                                    if ( status == 200 ) {   
                                        plus.runtime.install(plus.io.convertLocalFileSystemURL(d.filename),{},{},function(error){  
                                            uni.showToast({  
                                                title: '安装失败',  
                                                mask: false,  
                                                duration: 1500  
                                            });  
                                        })  
                                    } else {  
                                         uni.showToast({  
                                            title: '更新失败',  
                                            mask: false,  
                                            duration: 1500  
                                         });  
                                    }    
                                });  
                            dtask.start();   
                        }  
                    },  
                    fail: () => {},  
                    complete: () => {}  
                });  
            },  
        }
收起阅读 »

一周 D 报(2018-10-15)

周报

HBuilderX 自公测起,历经 50 个版本的迭代,终于迎来了 1.0 版本的正式发布。详见:http://ask.dcloud.net.cn/article/13507

uni-app

  • 内置地图更新为原生的高德地图后,层级和覆盖物的问题。:可以暂时使用问题中回复的方案,后面会支持 cover-view 来更方便地处理。
  • uni-app 不支持右滑关闭页面么? iOS 平台是支持的不需要额外配置,Android 平台不支持。
  • uni-app 有没有小程序中的 live-pusher 类似组件? 相关的组件等内容,还未完善。
  • uni-app 如何获取应用的 version? App 平台下需要调用 plus.runtime.version 来获取,参考 hello uni-app 的 App.vue。小程序的升级是小程序云服务统一管理的,不存在应用版本号的概念。
  • uni-app 中可以使用 Vant 的小程序库么? uni-app 中支持使用小程序的组件,详见文档:小程序组件支持
  • uni.getStorageInfo 的支持:App 平台还未支持此 API。
  • nvue 文件里import,无法使用uni-app内置文件:其实这个问题的重点在于如何实现 nvue 和 vue 的数据共享。因为 uni-app 中 vue 和 nvue 是两个独立的环境,并不能完全通用。只有部分 uni 的 API 是可以通用的,因此需要使用 uni.storage 相关的 API 来实现数据的共享。
  • uni-app请问如何隐藏滚动条,能否使用5+api:可以在 app-plus 中配置,详见问题回复。

其它问题

开源与分享

更多分享,请前往 精华区 查看。

欢迎更多的同学参与进来,分享自己的经验心得。

结束

本期周报就到这里,感谢大家的阅读。新的一周,祝大家工作顺利。

继续阅读 »

HBuilderX 自公测起,历经 50 个版本的迭代,终于迎来了 1.0 版本的正式发布。详见:http://ask.dcloud.net.cn/article/13507

uni-app

  • 内置地图更新为原生的高德地图后,层级和覆盖物的问题。:可以暂时使用问题中回复的方案,后面会支持 cover-view 来更方便地处理。
  • uni-app 不支持右滑关闭页面么? iOS 平台是支持的不需要额外配置,Android 平台不支持。
  • uni-app 有没有小程序中的 live-pusher 类似组件? 相关的组件等内容,还未完善。
  • uni-app 如何获取应用的 version? App 平台下需要调用 plus.runtime.version 来获取,参考 hello uni-app 的 App.vue。小程序的升级是小程序云服务统一管理的,不存在应用版本号的概念。
  • uni-app 中可以使用 Vant 的小程序库么? uni-app 中支持使用小程序的组件,详见文档:小程序组件支持
  • uni.getStorageInfo 的支持:App 平台还未支持此 API。
  • nvue 文件里import,无法使用uni-app内置文件:其实这个问题的重点在于如何实现 nvue 和 vue 的数据共享。因为 uni-app 中 vue 和 nvue 是两个独立的环境,并不能完全通用。只有部分 uni 的 API 是可以通用的,因此需要使用 uni.storage 相关的 API 来实现数据的共享。
  • uni-app请问如何隐藏滚动条,能否使用5+api:可以在 app-plus 中配置,详见问题回复。

其它问题

开源与分享

更多分享,请前往 精华区 查看。

欢迎更多的同学参与进来,分享自己的经验心得。

结束

本期周报就到这里,感谢大家的阅读。新的一周,祝大家工作顺利。

收起阅读 »

这个uniapp的api和组件太像小程序了有没有

uni_app

这个api和组件太像小程序了有没有

不过还是比较喜欢的,没有更多额外学习成本

这个api和组件太像小程序了有没有

不过还是比较喜欢的,没有更多额外学习成本

2020承接外包,长期有效,uniapp、web、php、微信

PHP h5+ uniapp Vue 外包

经济不景气,全栈程序员接外包补贴房贷。
可接uniapp、网站,微信小程序、logo海报、等平面设计(有团队),付费解决问题。
不管有没有需求欢迎qq微信骚扰。

qq:50401716
微信

5+案例(资讯,淘宝客,即时聊天):
https://m3w.cn/aihanfu
https://m3w.cn/dsg

一些案例图片:

网站及设计案例请加qq微信查看~

继续阅读 »

经济不景气,全栈程序员接外包补贴房贷。
可接uniapp、网站,微信小程序、logo海报、等平面设计(有团队),付费解决问题。
不管有没有需求欢迎qq微信骚扰。

qq:50401716
微信

5+案例(资讯,淘宝客,即时聊天):
https://m3w.cn/aihanfu
https://m3w.cn/dsg

一些案例图片:

网站及设计案例请加qq微信查看~

收起阅读 »

小程序开发费用,2018年的小程序开发费用

微信小程序 小程序

  现在常见的郑州小程序开发方式主要有以下三种,小程序开发费用通常是根据功能需求以及开发难度等因素决定,目前来说只有一个大致的价格区间,很多投资者在询问价格时,无法得到明确答复就是因为这些原因,而定制开发的小程序所需费用是三种开发方式中比较贵的。下面来详细的跟大家分析一下各种开发方式所对应的小程序开发区别吧。

  1、定制类小程序开发

  这类小程序所需的开发费用一般在一万以上,因为定制开发类的小程序可以满足企业自身的个性化需求的功能,从事这类定制类小程序开发公司通常会由产品经理、核心技术人员等团队成员和客户详细沟通需求,然后提供相应的报价和解决方案,定制类小程序在完成开发后,功能使用往往比较贴合客户需求。

  2、模板开发方式

  小程序开发公司一般要会根据不同的行业分类开发出一些固定的模板,一个模板同时可以卖给成千上万的客户,这种开发方式对于开发商来说利润很高,对用户而言所付出的成本也相对于低,但是这种开发方式弊端,就是无法修改模板,只是把小程序按年租售,同时也会存在部分功能无法实现又承载过多一些多余功能的情况,这类小程序的售后服务通常也不完善。

  3、开发各类常用模板的开发公司

  这类公司主要是开发一些常用的功能模板,与模板类不同的是,客户可以根据自己的需求来选择不同的功能进行组合,价格相对也会高一些,一般在几千到一万元以内,这类开发小程序虽然有一定的选择性,但功能并不能完全实现个性化定制。

  小程序开发需要多少费用?这是所有企业和个体商家关注的焦点,首先无论是哪一类型的小程序,开发费用都相对较低,但是不同类型的小程序根据用户的功能需求的不同,会导致开发费用有所差异,一般价格区间在几千到几万之间,小程序的开发费用是可以根据其开发方式推算出大概的预算方案,所以具体还是要跟开发公司协商才行。

本文由专业的郑州小程序开发(http://www.appsaa.com)燚轩科技整理发布,如需转载请注明出处。

继续阅读 »

  现在常见的郑州小程序开发方式主要有以下三种,小程序开发费用通常是根据功能需求以及开发难度等因素决定,目前来说只有一个大致的价格区间,很多投资者在询问价格时,无法得到明确答复就是因为这些原因,而定制开发的小程序所需费用是三种开发方式中比较贵的。下面来详细的跟大家分析一下各种开发方式所对应的小程序开发区别吧。

  1、定制类小程序开发

  这类小程序所需的开发费用一般在一万以上,因为定制开发类的小程序可以满足企业自身的个性化需求的功能,从事这类定制类小程序开发公司通常会由产品经理、核心技术人员等团队成员和客户详细沟通需求,然后提供相应的报价和解决方案,定制类小程序在完成开发后,功能使用往往比较贴合客户需求。

  2、模板开发方式

  小程序开发公司一般要会根据不同的行业分类开发出一些固定的模板,一个模板同时可以卖给成千上万的客户,这种开发方式对于开发商来说利润很高,对用户而言所付出的成本也相对于低,但是这种开发方式弊端,就是无法修改模板,只是把小程序按年租售,同时也会存在部分功能无法实现又承载过多一些多余功能的情况,这类小程序的售后服务通常也不完善。

  3、开发各类常用模板的开发公司

  这类公司主要是开发一些常用的功能模板,与模板类不同的是,客户可以根据自己的需求来选择不同的功能进行组合,价格相对也会高一些,一般在几千到一万元以内,这类开发小程序虽然有一定的选择性,但功能并不能完全实现个性化定制。

  小程序开发需要多少费用?这是所有企业和个体商家关注的焦点,首先无论是哪一类型的小程序,开发费用都相对较低,但是不同类型的小程序根据用户的功能需求的不同,会导致开发费用有所差异,一般价格区间在几千到几万之间,小程序的开发费用是可以根据其开发方式推算出大概的预算方案,所以具体还是要跟开发公司协商才行。

本文由专业的郑州小程序开发(http://www.appsaa.com)燚轩科技整理发布,如需转载请注明出处。

收起阅读 »

Anroid 6.0 动态权限申请代码分享

/*  
    正常权限,无需动态申请:  
        ACCESS_LOCATION_EXTRA_COMMANDS  
        ACCESS_NETWORK_STATE  
        ACCESS_NOTIFICATION_POLICY  
        ACCESS_WIFI_STATE  
        BLUETOOTH  
        BLUETOOTH_ADMIN  
        BROADCAST_STICKY  
        CHANGE_NETWORK_STATE  
        CHANGE_WIFI_MULTICAST_STATE  
        CHANGE_WIFI_STATE  
        DISABLE_KEYGUARD  
        EXPAND_STATUS_BAR  
        GET_PACKAGE_SIZE  
        INSTALL_SHORTCUT  
        INTERNET  
        KILL_BACKGROUND_PROCESSES  
        MODIFY_AUDIO_SETTINGS  
        NFC  
        READ_SYNC_SETTINGS  
        READ_SYNC_STATS  
        RECEIVE_BOOT_COMPLETED  
        REORDER_TASKS  
        REQUEST_INSTALL_PACKAGES  
        SET_ALARM  
        SET_TIME_ZONE  
        SET_WALLPAPER  
        SET_WALLPAPER_HINTS  
        TRANSMIT_IR  
        UNINSTALL_SHORTCUT  
        USE_FINGERPRINT  
        VIBRATE  
        WAKE_LOCK  
        WRITE_SYNC_SETTINGS  

    2)危险权限,需要动态申请:  
    group:android.permission-group.STORAGE  
         READ_EXTERNAL_STORAGE   
         WRITE_EXTERNAL_STORAGE  

    group:android.permission-group.CONTACTS   
         WRITE_CONTACTS   
         GET_ACCOUNTS   
         READ_CONTACTS  

    group:android.permission-group.PHONE  
         READ_CALL_LOG   
         READ_PHONE_STATE   
         CALL_PHONE   
         WRITE_CALL_LOG   
         USE_SIP   
         PROCESS_OUTGOING_CALLS   
        com.android.voicemail.permission.ADD_VOICEMAIL  

    group:android.permission-group.CALENDAR  
         READ_CALENDAR   
         WRITE_CALENDAR  

    group:android.permission-group.CAMERA  
         CAMERA  

    group:android.permissiongroup.SENSORS  
         BODY_SENSORS  

    group:android.permission-group.LOCATION  
         ACCESS_FINE_LOCATION   
         ACCESS_COARSE_LOCATION  

    group:android.permission-group.MICROPHONE  
         RECORD_AUDIO  

    group:android.permission-group.SMS  
         READ_SMS   
         RECEIVE_WAP_PUSH   
         RECEIVE_MMS   
         RECEIVE_SMS   
         SEND_SMS   
         READ_CELL_BROADCASTS  
*/  

/**  
 * Me:   
 *    cnscn <214363570@qq.com>  
 *  
 * 参考:  
 *    https://blog.csdn.net/lvyoujt/article/details/52826556  
 *    https://developer.android.com/reference/android/Manifest.permission  
 *    https://developer.android.com/reference/android/os/Build.VERSION  
 */  

function plusReady() {  
    var Build = plus.android.importClass("android.os.Build");  
    var Manifest = plus.android.importClass("android.Manifest");  
    var MainActivity = plus.android.runtimeMainActivity();  
    //var context=main.getApplicationContext(); //未用到,在此仅供参考  

    var ArrPermissions = [          
        Manifest.permission.READ_EXTERNAL_STORAGE,  
        Manifest.permission.WRITE_EXTERNAL_STORAGE,  
        Manifest.permission.CAMERA  
    ];  

    function PermissionCheck(permission) {  
        if (Build.VERSION.SDK_INT >= 23) {  
            if (MainActivity.checkSelfPermission(permission) == -1) {  
                return false;  
            }  
        }  
        return true;  
    }  

    function PermissionChecks(Arr) {  
        var HasPermission = true;  
        for (var index in Arr) {  
            var permission = Arr[index];  
            //如果此处没有权限,则是用户拒绝了  
            if (!PermissionCheck(permission)) {  
                HasPermission = false;  
                break;  
            }  
        }  
        return HasPermission;  
    }  

    function PermissionRequest(Arr) {  
        var REQUEST_CODE_CONTACT = 101;  
        if (Build.VERSION.SDK_INT >= 23) {  
            MainActivity.requestPermissions(Arr, REQUEST_CODE_CONTACT);  
        }  
    }  

    //如果没有权限,则申请  
    if (!PermissionChecks(ArrPermissions)) {  
            PermissionRequest(ArrPermissions);  
    } else { //如果拥有权限,那么干点啥吧^_^  
            //.......  
    }  
}  

if (window.plus) {  
        plusReady();  
} else {  
        document.addEventListener('plusready', plusReady, false);  
}

继续阅读 »
/*  
    正常权限,无需动态申请:  
        ACCESS_LOCATION_EXTRA_COMMANDS  
        ACCESS_NETWORK_STATE  
        ACCESS_NOTIFICATION_POLICY  
        ACCESS_WIFI_STATE  
        BLUETOOTH  
        BLUETOOTH_ADMIN  
        BROADCAST_STICKY  
        CHANGE_NETWORK_STATE  
        CHANGE_WIFI_MULTICAST_STATE  
        CHANGE_WIFI_STATE  
        DISABLE_KEYGUARD  
        EXPAND_STATUS_BAR  
        GET_PACKAGE_SIZE  
        INSTALL_SHORTCUT  
        INTERNET  
        KILL_BACKGROUND_PROCESSES  
        MODIFY_AUDIO_SETTINGS  
        NFC  
        READ_SYNC_SETTINGS  
        READ_SYNC_STATS  
        RECEIVE_BOOT_COMPLETED  
        REORDER_TASKS  
        REQUEST_INSTALL_PACKAGES  
        SET_ALARM  
        SET_TIME_ZONE  
        SET_WALLPAPER  
        SET_WALLPAPER_HINTS  
        TRANSMIT_IR  
        UNINSTALL_SHORTCUT  
        USE_FINGERPRINT  
        VIBRATE  
        WAKE_LOCK  
        WRITE_SYNC_SETTINGS  

    2)危险权限,需要动态申请:  
    group:android.permission-group.STORAGE  
         READ_EXTERNAL_STORAGE   
         WRITE_EXTERNAL_STORAGE  

    group:android.permission-group.CONTACTS   
         WRITE_CONTACTS   
         GET_ACCOUNTS   
         READ_CONTACTS  

    group:android.permission-group.PHONE  
         READ_CALL_LOG   
         READ_PHONE_STATE   
         CALL_PHONE   
         WRITE_CALL_LOG   
         USE_SIP   
         PROCESS_OUTGOING_CALLS   
        com.android.voicemail.permission.ADD_VOICEMAIL  

    group:android.permission-group.CALENDAR  
         READ_CALENDAR   
         WRITE_CALENDAR  

    group:android.permission-group.CAMERA  
         CAMERA  

    group:android.permissiongroup.SENSORS  
         BODY_SENSORS  

    group:android.permission-group.LOCATION  
         ACCESS_FINE_LOCATION   
         ACCESS_COARSE_LOCATION  

    group:android.permission-group.MICROPHONE  
         RECORD_AUDIO  

    group:android.permission-group.SMS  
         READ_SMS   
         RECEIVE_WAP_PUSH   
         RECEIVE_MMS   
         RECEIVE_SMS   
         SEND_SMS   
         READ_CELL_BROADCASTS  
*/  

/**  
 * Me:   
 *    cnscn <214363570@qq.com>  
 *  
 * 参考:  
 *    https://blog.csdn.net/lvyoujt/article/details/52826556  
 *    https://developer.android.com/reference/android/Manifest.permission  
 *    https://developer.android.com/reference/android/os/Build.VERSION  
 */  

function plusReady() {  
    var Build = plus.android.importClass("android.os.Build");  
    var Manifest = plus.android.importClass("android.Manifest");  
    var MainActivity = plus.android.runtimeMainActivity();  
    //var context=main.getApplicationContext(); //未用到,在此仅供参考  

    var ArrPermissions = [          
        Manifest.permission.READ_EXTERNAL_STORAGE,  
        Manifest.permission.WRITE_EXTERNAL_STORAGE,  
        Manifest.permission.CAMERA  
    ];  

    function PermissionCheck(permission) {  
        if (Build.VERSION.SDK_INT >= 23) {  
            if (MainActivity.checkSelfPermission(permission) == -1) {  
                return false;  
            }  
        }  
        return true;  
    }  

    function PermissionChecks(Arr) {  
        var HasPermission = true;  
        for (var index in Arr) {  
            var permission = Arr[index];  
            //如果此处没有权限,则是用户拒绝了  
            if (!PermissionCheck(permission)) {  
                HasPermission = false;  
                break;  
            }  
        }  
        return HasPermission;  
    }  

    function PermissionRequest(Arr) {  
        var REQUEST_CODE_CONTACT = 101;  
        if (Build.VERSION.SDK_INT >= 23) {  
            MainActivity.requestPermissions(Arr, REQUEST_CODE_CONTACT);  
        }  
    }  

    //如果没有权限,则申请  
    if (!PermissionChecks(ArrPermissions)) {  
            PermissionRequest(ArrPermissions);  
    } else { //如果拥有权限,那么干点啥吧^_^  
            //.......  
    }  
}  

if (window.plus) {  
        plusReady();  
} else {  
        document.addEventListener('plusready', plusReady, false);  
}

收起阅读 »

小程序开发之插件功能的有效实现方法

小程序

  我们在做小程序开发时,比如说在编辑器里里面编辑了一段内容,输出网页版只需要htmlspecialchars_decode()函数就可以搞定了,但是输出小程序就并不是那么简单了,必须要使用wxParse插件才能完成。下面跟大家分享一下导入插件的使用方法:

在wxml中引入,代码如下:

{{title}}

在wcss中引入,代码如下:

@import "/wxParse/wxParse.wxss";

.title{

/ border:solid #000 1rpx; /

width: 100% ;

text-align: center;

background-color: #fff;

font-size: 30rpx;

height:80rpx;

line-height: 80rpx;

}

.content{

/ border:solid #000 1rpx; /

width: 100% ;

margin-top:20rpx;

height: 100%;

background-color: #fff;

font-size: 25rpx;

padding:20rpx;

}

在js中引入,代码如下:

// pages/helpcontent/helpcontent.js

var WxParse = require('../../wxParse/wxParse.js');

Page({

/**

  • 页面的初始数据

*/

data: {

},

/**

  • 生命周期函数--监听页面加载

*/

onLoad: function (options) {

var that=this

wx.request({

url: 'https://www.appsaa.com', //仅为示例,并非真实的接口地址

header: {

'content-type': 'application/json'

},

success: function (res) {

console.log(res.data.title)

that.setData({

title: res.data.title,//第一个data为固定用法,第二个data是json中的data

infos: WxParse.wxParse('infos', 'html', res.data.infos, that, 5)

})

}

})

}

  那么到这里就结束了,大家现在可以尝试一下了,如果还是存在有不理解或者不清楚的地方,都是可以留言咨询我们的。

  本文由专业的郑州小程序开发公司燚轩科技整理发布,原创不易,如需转载请注明出处。

继续阅读 »

  我们在做小程序开发时,比如说在编辑器里里面编辑了一段内容,输出网页版只需要htmlspecialchars_decode()函数就可以搞定了,但是输出小程序就并不是那么简单了,必须要使用wxParse插件才能完成。下面跟大家分享一下导入插件的使用方法:

在wxml中引入,代码如下:

{{title}}

在wcss中引入,代码如下:

@import "/wxParse/wxParse.wxss";

.title{

/ border:solid #000 1rpx; /

width: 100% ;

text-align: center;

background-color: #fff;

font-size: 30rpx;

height:80rpx;

line-height: 80rpx;

}

.content{

/ border:solid #000 1rpx; /

width: 100% ;

margin-top:20rpx;

height: 100%;

background-color: #fff;

font-size: 25rpx;

padding:20rpx;

}

在js中引入,代码如下:

// pages/helpcontent/helpcontent.js

var WxParse = require('../../wxParse/wxParse.js');

Page({

/**

  • 页面的初始数据

*/

data: {

},

/**

  • 生命周期函数--监听页面加载

*/

onLoad: function (options) {

var that=this

wx.request({

url: 'https://www.appsaa.com', //仅为示例,并非真实的接口地址

header: {

'content-type': 'application/json'

},

success: function (res) {

console.log(res.data.title)

that.setData({

title: res.data.title,//第一个data为固定用法,第二个data是json中的data

infos: WxParse.wxParse('infos', 'html', res.data.infos, that, 5)

})

}

})

}

  那么到这里就结束了,大家现在可以尝试一下了,如果还是存在有不理解或者不清楚的地方,都是可以留言咨询我们的。

  本文由专业的郑州小程序开发公司燚轩科技整理发布,原创不易,如需转载请注明出处。

收起阅读 »

mui 如何禁用下拉刷新

下拉刷新

down: {
height: '50px',
range: '80px',
contentdown: "下拉可以刷新", //可选,在下拉可刷新状态时,下拉刷新控件上显示的标题内容
contentover: "释放立即刷新", //可选,在释放可刷新状态时,下拉刷新控件上显示的标题内容
contentrefresh: "正在刷新...", //可选,正在刷新状态时,下拉刷新控件上显示的标题内容
//style: "circle",
color: '#f78000',
callback: downFn // 下拉执行函数
},
注释 //style: "circle",

这个方法安卓可以 ios还是有下拉的样式
可以全部注释,或者不加

继续阅读 »

down: {
height: '50px',
range: '80px',
contentdown: "下拉可以刷新", //可选,在下拉可刷新状态时,下拉刷新控件上显示的标题内容
contentover: "释放立即刷新", //可选,在释放可刷新状态时,下拉刷新控件上显示的标题内容
contentrefresh: "正在刷新...", //可选,正在刷新状态时,下拉刷新控件上显示的标题内容
//style: "circle",
color: '#f78000',
callback: downFn // 下拉执行函数
},
注释 //style: "circle",

这个方法安卓可以 ios还是有下拉的样式
可以全部注释,或者不加

收起阅读 »

使用5+SDK实现IOS集成蓝牙与网口打印

打印 print iOS h5+

该工程是Hbuilder最新IOS 5+SDK的示例demo 集成了蓝牙打印机和网口打印机
使用该工程可以直接封装HTML代码

https://github.com/qjdice/Hbuider-ios-printer

该工程是Hbuilder最新IOS 5+SDK的示例demo 集成了蓝牙打印机和网口打印机
使用该工程可以直接封装HTML代码

https://github.com/qjdice/Hbuider-ios-printer

小程序开发如何实现视频或音频自定义可拖拽进度条

  程序原生组件的音频播放时并没有进度条的显示,而此次在我们所接的项目中,鉴于原生的视频进度条样式太丑,产品要求做一个可拖拽的进度条满足需求。视频和音频提供的api大致是相似的,可以根据以下代码修改为与音频相关的进度条。
wxml的结构如下:

<video id="myVideo" src="http://wxsnsdy.tc.qq.com/105/20210/snsdyvideodownload?filekey=30280201010421301f0201690402534804102ca905ce620b1241b726bc41dcff44e00204012882540400&bizid=1023&hy=SH&fileparam=302c020101042530230204136ffd93020457e3c4ff02024ef202031e8d7f02030f42400204045a320a0201000400" enable-danmu danmu-btn controls="{{false}}" autoplay='{{true}}' bindtimeupdate="videoUpdate" objectFit="fill"></video>
<view class='process-container'>
<image src='{{playStates ? "../../assets/image/pause_icon.png" : "../../assets/image/play_icon.png"}}' class='video-controls-icon' bindtap='videoOpreation'></image>
<view class='slider-container'>
<slider bindchange="sliderChange" bindchanging="sliderChanging" step="1" value="{{sliderValue}}" backgroundColor="#A8A8A8" activeColor="#FFEE83" block-color="#FFEE83" />
</view>
</view>

data中初始化了sliderValue, updateState, playStates几个变量。

data: {

sliderValue: 0, //控制进度条slider的值,

updateState: false, //防止视频播放过程中导致的拖拽失效

playStates: true //控制播放 & 暂停按钮的显示

},

onReady: function () {

this.videoContext = wx.createVideoContext('myVideo');

this.setData({

updateState: true

})

},

videoUpdate在播放进度变化时触发,触发频率 250ms 一次。event.detail = {currentTime, duration},currentTime表示当前时间,duration表示总时长,都以秒为单位

videoUpdate(e) {

if (this.data.updateState) { //判断拖拽完成后才触发更新,避免拖拽失效

let sliderValue = e.detail.currentTime / e.detail.duration * 100;

this.setData({

sliderValue,

duration: e.detail.duration

})

}

},

进度条可拖拽并指定视频跳转到相应的位置

sliderChanging(e) {

this.setData({

updateState: false //拖拽过程中,不允许更新进度条

})

},

sliderChange(e) {

if (this.data.duration) {

this.videoContext.seek(e.detail.value / 100 * this.data.duration); //完成拖动后,计算对应时间并跳转到指定位置

this.setData({

sliderValue: e.detail.value,

updateState: true //完成拖动后允许更新滚动条

})

}

},

暂停/播放视频

videoOpreation() {

this.data.playStates ? this.videoContext.pause() : this.videoContext.play();

this.setData({

playStates: !this.data.playStates

})

}
  总结:slider的最大值为100, step的值最小为1,这会导致视频或音频播放时间过长的时候,slider滑块移动速度很慢,拖拽移动的时间间隔较大,用户体验差。如果还是有不理解的地方,可以留言咨询。

  本文由专业的郑州小程序开发公司燚轩科技整理发布,如需转载请注明出处。

继续阅读 »

  程序原生组件的音频播放时并没有进度条的显示,而此次在我们所接的项目中,鉴于原生的视频进度条样式太丑,产品要求做一个可拖拽的进度条满足需求。视频和音频提供的api大致是相似的,可以根据以下代码修改为与音频相关的进度条。
wxml的结构如下:

<video id="myVideo" src="http://wxsnsdy.tc.qq.com/105/20210/snsdyvideodownload?filekey=30280201010421301f0201690402534804102ca905ce620b1241b726bc41dcff44e00204012882540400&bizid=1023&hy=SH&fileparam=302c020101042530230204136ffd93020457e3c4ff02024ef202031e8d7f02030f42400204045a320a0201000400" enable-danmu danmu-btn controls="{{false}}" autoplay='{{true}}' bindtimeupdate="videoUpdate" objectFit="fill"></video>
<view class='process-container'>
<image src='{{playStates ? "../../assets/image/pause_icon.png" : "../../assets/image/play_icon.png"}}' class='video-controls-icon' bindtap='videoOpreation'></image>
<view class='slider-container'>
<slider bindchange="sliderChange" bindchanging="sliderChanging" step="1" value="{{sliderValue}}" backgroundColor="#A8A8A8" activeColor="#FFEE83" block-color="#FFEE83" />
</view>
</view>

data中初始化了sliderValue, updateState, playStates几个变量。

data: {

sliderValue: 0, //控制进度条slider的值,

updateState: false, //防止视频播放过程中导致的拖拽失效

playStates: true //控制播放 & 暂停按钮的显示

},

onReady: function () {

this.videoContext = wx.createVideoContext('myVideo');

this.setData({

updateState: true

})

},

videoUpdate在播放进度变化时触发,触发频率 250ms 一次。event.detail = {currentTime, duration},currentTime表示当前时间,duration表示总时长,都以秒为单位

videoUpdate(e) {

if (this.data.updateState) { //判断拖拽完成后才触发更新,避免拖拽失效

let sliderValue = e.detail.currentTime / e.detail.duration * 100;

this.setData({

sliderValue,

duration: e.detail.duration

})

}

},

进度条可拖拽并指定视频跳转到相应的位置

sliderChanging(e) {

this.setData({

updateState: false //拖拽过程中,不允许更新进度条

})

},

sliderChange(e) {

if (this.data.duration) {

this.videoContext.seek(e.detail.value / 100 * this.data.duration); //完成拖动后,计算对应时间并跳转到指定位置

this.setData({

sliderValue: e.detail.value,

updateState: true //完成拖动后允许更新滚动条

})

}

},

暂停/播放视频

videoOpreation() {

this.data.playStates ? this.videoContext.pause() : this.videoContext.play();

this.setData({

playStates: !this.data.playStates

})

}
  总结:slider的最大值为100, step的值最小为1,这会导致视频或音频播放时间过长的时候,slider滑块移动速度很慢,拖拽移动的时间间隔较大,用户体验差。如果还是有不理解的地方,可以留言咨询。

  本文由专业的郑州小程序开发公司燚轩科技整理发布,如需转载请注明出处。

收起阅读 »

doodoo.js配置教程 

node nodejs

Doodoo.js -- 中文最佳实践Node.js Web快速开发框架。支持Koa.js, Express.js中间件,支持模块化,插件,钩子机制,可以直接在项目里使用 ES6/7(Generator Function, Class, Async & Await)等特性 https://www.doodooke.com

配置
doodoo配置.env 文件位于项目根目录下,作为全局默认环境配置文件。

# 应用配置  
APP_ROOT=app  
APP_PORT=3000  
APP_HOST=127.0.0.1  

# MYSQL数据库链接  
MYSQL=false  
MYSQL_HOST=127.0.0.1  
MYSQL_USER=root  
MYSQL_PASSWORD=root  
MYSQL_DATABASE=doodoo  
MYSQL_PORT=3306  
MYSQL_CHARSET=utf8mb4  

# MONGODB数据库链接  
MONGOOSE=false  
MONGOOSE_URI=mongodb://127.0.0.1:27017/doodoo  

# REDIS链接  
REDIS=false  
REDIS_HOST=127.0.0.1  
REDIS_PORT=6379  
REDIS_PREFIX=doodoo:  

# 静态资源服务  
STATIC_DIR=www  
STATIC_MAXAGE=30 * 24 * 60 * 60  
STATIC_DYNAMIC=true

支持根据不同环境加载不同的配置文件(自定义文件配置将覆盖全局默认环境配置)

# 创建docker.env文件  
touch docker.env  

# 自定义docker环境启动  
NODE_ENV=docker node app.js
继续阅读 »

Doodoo.js -- 中文最佳实践Node.js Web快速开发框架。支持Koa.js, Express.js中间件,支持模块化,插件,钩子机制,可以直接在项目里使用 ES6/7(Generator Function, Class, Async & Await)等特性 https://www.doodooke.com

配置
doodoo配置.env 文件位于项目根目录下,作为全局默认环境配置文件。

# 应用配置  
APP_ROOT=app  
APP_PORT=3000  
APP_HOST=127.0.0.1  

# MYSQL数据库链接  
MYSQL=false  
MYSQL_HOST=127.0.0.1  
MYSQL_USER=root  
MYSQL_PASSWORD=root  
MYSQL_DATABASE=doodoo  
MYSQL_PORT=3306  
MYSQL_CHARSET=utf8mb4  

# MONGODB数据库链接  
MONGOOSE=false  
MONGOOSE_URI=mongodb://127.0.0.1:27017/doodoo  

# REDIS链接  
REDIS=false  
REDIS_HOST=127.0.0.1  
REDIS_PORT=6379  
REDIS_PREFIX=doodoo:  

# 静态资源服务  
STATIC_DIR=www  
STATIC_MAXAGE=30 * 24 * 60 * 60  
STATIC_DYNAMIC=true

支持根据不同环境加载不同的配置文件(自定义文件配置将覆盖全局默认环境配置)

# 创建docker.env文件  
touch docker.env  

# 自定义docker环境启动  
NODE_ENV=docker node app.js
收起阅读 »