HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

Nvue动态更改titleNView的值onNavigationBarButtonTap监听不生效问题

nvue

onNavigationBarButtonTap(e) {

        const index = e.index  
        if (index == 0) {  

            console.log("点击了")  

        }   
    },  

setStyle(index, text) {
console.log(index, text)
let pages = getCurrentPages();
let page = pages[pages.length - 1];
// // // 添加文字过长截取为3个字符,请根据自己业务需求更改
if (text.length > 3) {
text = text.substr(0, 3) + '...';
}
console.log(index, text)
let currentWebview = page.$getAppWebview();
currentWebview.setTitleNViewButtonStyle(0, {
text: text,
redDot: false
});

        },
继续阅读 »

onNavigationBarButtonTap(e) {

        const index = e.index  
        if (index == 0) {  

            console.log("点击了")  

        }   
    },  

setStyle(index, text) {
console.log(index, text)
let pages = getCurrentPages();
let page = pages[pages.length - 1];
// // // 添加文字过长截取为3个字符,请根据自己业务需求更改
if (text.length > 3) {
text = text.substr(0, 3) + '...';
}
console.log(index, text)
let currentWebview = page.$getAppWebview();
currentWebview.setTitleNViewButtonStyle(0, {
text: text,
redDot: false
});

        },
收起阅读 »

uniapp webrtc 音视频通话即时通讯解决方案

webrtc

webrtc 这个百度能搜索到很多用法
我用的https://webrtc.github.io/adapter/adapter-latest.js 这个整合api
写了很多浏览器调用摄像头的hack 所以很好用
关于webrtc uniapp 的坑
1、video audio 不支持srcobject 播放数据流
2、video在app上的层级没有控制
3、video和audio的自动播放问题
于是用webview 在html上解决这些问题就比较简单了
然后通过vue与html 直接的交互解决页面交互和数据互通的问题

https://ext.dcloud.net.cn/plugin?id=9024
完整的demo 有不懂的可以问我

继续阅读 »

webrtc 这个百度能搜索到很多用法
我用的https://webrtc.github.io/adapter/adapter-latest.js 这个整合api
写了很多浏览器调用摄像头的hack 所以很好用
关于webrtc uniapp 的坑
1、video audio 不支持srcobject 播放数据流
2、video在app上的层级没有控制
3、video和audio的自动播放问题
于是用webview 在html上解决这些问题就比较简单了
然后通过vue与html 直接的交互解决页面交互和数据互通的问题

https://ext.dcloud.net.cn/plugin?id=9024
完整的demo 有不懂的可以问我

收起阅读 »

20分钟学会写uni-app小程序 - vue、uniCloud 前端后端一体开发以及留言板小案例演示

unicloud入门教程 uni_app项目

一期学会写uni-app小程序 - vue、uniCloud 前端后端一体开发以及留言板小案例演示
https://www.bilibili.com/video/BV1eT411L7yj/

一期学会写uni-app小程序 - vue、uniCloud 前端后端一体开发以及留言板小案例演示
https://www.bilibili.com/video/BV1eT411L7yj/

web开发工程师找兼职

本人2年游戏客户端开发经验,4年web开发经验,公司空闲时间比较多,现找web开发兼职,app、h5、微信小程序、数据可视化项目都可以, cocos creator的小游戏也可接 , 微信号:Bill_Dong_web

本人2年游戏客户端开发经验,4年web开发经验,公司空闲时间比较多,现找web开发兼职,app、h5、微信小程序、数据可视化项目都可以, cocos creator的小游戏也可接 , 微信号:Bill_Dong_web

uni原生插件注册

不用创建json文件的另外一种注册方式
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
try {
UniSDKEngine.registerModule("TestModule", TestModule.class);
} catch (UniException e) {
e.printStackTrace();
}
}
}

继续阅读 »

不用创建json文件的另外一种注册方式
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
try {
UniSDKEngine.registerModule("TestModule", TestModule.class);
} catch (UniException e) {
e.printStackTrace();
}
}
}

收起阅读 »

拓扑新动画效果,可拖拽,可滚轮缩放。

canvas

canvas拓扑动画
展示效果网址 http://jstopo.top

!展示视频

         init(){  
            this.domRef = this.$refs.canvas;  
            this.w = this.domRef.width = this.domRef.clientWidth,  
            this.h = this.domRef.height = this.domRef.clientHeight;  
            this.ctx = this.domRef.getContext("2d");  
            this.ctx.textAlign = "center";  
            this.ctx.textBaseline = "top";  
            this.ctx.font = "18px 黑体";  
            this.dotMove();  
        },
继续阅读 »

canvas拓扑动画
展示效果网址 http://jstopo.top

!展示视频

         init(){  
            this.domRef = this.$refs.canvas;  
            this.w = this.domRef.width = this.domRef.clientWidth,  
            this.h = this.domRef.height = this.domRef.clientHeight;  
            this.ctx = this.domRef.getContext("2d");  
            this.ctx.textAlign = "center";  
            this.ctx.textBaseline = "top";  
            this.ctx.font = "18px 黑体";  
            this.dotMove();  
        },
收起阅读 »

app-nvue webview加载本地网页,真机上路径错误

app-nvue webview加载本地网页,url不能携带参数(如:/hybrid/html/index.html?id=1 改为 /hybrid/html/index.html)。
数据传递使用webview通信。

webview官网:https://uniapp.dcloud.net.cn/component/web-view.html


<template>  
    <view>  
        <web-view ref="webview" class="webview" @onPostMessage="handlePostMessage"></web-view>  
        <button class="button" @click="evalJs">evalJs(改变webview背景颜色)</button>  
    </view>  
</template>  

<script>  
    export default {  
        data: {  
        },  
        methods: {  
            // webview向外部发送消息  
            handlePostMessage: function(data) {  
                console.log("接收到消息:"   JSON.stringify(data.detail));  
            },  
            // 调用 webview 内部逻辑和方法(方法挂载到window对象上)  
            evalJs: function() {  
                this.$refs.webview.evalJs(`方法名(${paramStr})`);  
            }  
        }  
    }  
</script>
继续阅读 »

app-nvue webview加载本地网页,url不能携带参数(如:/hybrid/html/index.html?id=1 改为 /hybrid/html/index.html)。
数据传递使用webview通信。

webview官网:https://uniapp.dcloud.net.cn/component/web-view.html


<template>  
    <view>  
        <web-view ref="webview" class="webview" @onPostMessage="handlePostMessage"></web-view>  
        <button class="button" @click="evalJs">evalJs(改变webview背景颜色)</button>  
    </view>  
</template>  

<script>  
    export default {  
        data: {  
        },  
        methods: {  
            // webview向外部发送消息  
            handlePostMessage: function(data) {  
                console.log("接收到消息:"   JSON.stringify(data.detail));  
            },  
            // 调用 webview 内部逻辑和方法(方法挂载到window对象上)  
            evalJs: function() {  
                this.$refs.webview.evalJs(`方法名(${paramStr})`);  
            }  
        }  
    }  
</script>
收起阅读 »

如何解决wap2app打包iOS后首页左滑退出APP

iOS 云端打包发布常见问题 wap2app

iOS中左滑是返回上一页的操作,如果是刚打开APP,使用左滑会导致退出APP。
可以使用以下方法屏蔽左滑操作。

Step1.修改sitemap.json文件
将global>webviewParameter节点插入:

"popGesture": "none",
继续阅读 »

iOS中左滑是返回上一页的操作,如果是刚打开APP,使用左滑会导致退出APP。
可以使用以下方法屏蔽左滑操作。

Step1.修改sitemap.json文件
将global>webviewParameter节点插入:

"popGesture": "none",
收起阅读 »

如何解决打包后wap2app顶部标题栏与APP首页内容重叠,真机调试中显示正常

云端打包发布常见问题 自定义导航栏 导航栏 wap2app

Step1.修改manifest.json文件

将plus>statusbar>immersed的值修改为"false"或"none"。

即:

"plus" : {  
......  
        "statusbar" : {  
            "immersed" : "none"  
        },  
......  
}

Step2.(可选)修改导航栏颜色样式

完成Step1后导航栏默认显示为灰色背景,黑色字体。

如需修改样式,请修改client_index.html文件。

在body标签中加入

        <script type="text/javascript">          
            if(window.plus)  
            {  
                plusReady()  
            }  
            else  
            {  
                document.addEventListener('plusready',plusReady,false)  
            }  
            function plusReady()  
            {  
                plus.navigator.setStatusBarBackground('#FFFFFF');  
                plus.navigator.setStatusBarStyle('dark');  
            }  
        </script>
继续阅读 »

Step1.修改manifest.json文件

将plus>statusbar>immersed的值修改为"false"或"none"。

即:

"plus" : {  
......  
        "statusbar" : {  
            "immersed" : "none"  
        },  
......  
}

Step2.(可选)修改导航栏颜色样式

完成Step1后导航栏默认显示为灰色背景,黑色字体。

如需修改样式,请修改client_index.html文件。

在body标签中加入

        <script type="text/javascript">          
            if(window.plus)  
            {  
                plusReady()  
            }  
            else  
            {  
                document.addEventListener('plusready',plusReady,false)  
            }  
            function plusReady()  
            {  
                plus.navigator.setStatusBarBackground('#FFFFFF');  
                plus.navigator.setStatusBarStyle('dark');  
            }  
        </script>
收起阅读 »

python后端直接通过http的方式操作数据库, 不通过web控制台或者云函数

后端 数据库 python

只贴下python的insert数据库的操作, 其他语言类似
免费版的url = 'https://api.bspapp.com/client'
收费版的是url = 'https://api.next.bspapp.com/client'自己替换下

import requests  
import json  
import time  
import hmac  
import hashlib  

def insert():  
    # accessToken是后面header需要的参数  
    accessToken = get_access_token()  
    url = 'https://api.bspapp.com/client'  
    payload = {  
        'method': 'serverless.function.runtime.invoke',  
        'params': json.dumps(  
            {  
                "functionTarget": "DCloud-clientDB",  
                "functionArgs": {  
                    "command": {  
                        "$db": [  
                            {  
                                "$method": "collection",  
                                "$param": ["表名"]  
                            }, {  
                                "$method": "add",                        #如果是update这里add就换成update. 写法类似于mongodb的  
                                "$param": [{"字段名1": "字段值1"}]  
                            }  
                        ]  
                    }  
                }  
            }  
        ),  
        # spaceId自己在web控制台找, timestamp是时间戳  
        'spaceId': spaceId,  
        'timestamp': int(round(time.time() * 1000)),  
        'token': accessToken,  
    }  
    headers = {  
        'content-type': 'application/json',  
        'x-basement-token': accessToken,  
        'x-serverless-sign': get_sign(payload),  
    }  
    payload = json.dumps(payload)  
    # 发送post请求  
    response = requests.post(url, data=payload, headers=headers)  
    result = json.loads(response.text)  
    return result  

#获取access_token的方法, access_token一段时间会过期  
def get_access_token():  
     url = 'https://api.bspapp.com/client'  
     payload = {  
           'method': 'serverless.auth.user.anonymousAuthorize',  
            'params': '{}',  
            'spaceId': spaceId,  
            'timestamp': int(round(time.time() * 1000)),  
      }  
      headers = {  
             'Content-Type': 'application/json',  
              'x-serverless-sign': get_sign(payload)  
      }  

      payload = json.dumps(payload)  
      response = requests.post(url, data=payload, headers=headers)  
      result = json.loads(response.text)  

      access_token = result['data']['accessToken']  
      return access_token   

# 签名参数  
def get_sign(param):  
    #按照键名的升序排序  
    param = ksort(param)  
    #键与值 等号拼接的数组, 结果如["键1=值1", "键2=值2", "键3=值3"...]  
    signList = []  
    for k, v in param:  
        if v != '':  
            signList.append(k + '=' + str(v))  
    # 每个参数对拼接&并连在一起的字符串, 结果如 "键1=值1&键2=值2&键3=值3"...  
    signPars = '&'.join(signList)  
    #md5 hmac加密, clientSecret自己的web控制台里找, hmac, hashlib是python自带的库..其他语言也应该有类似的  
    sign = hmac.new(clientSecret.encode('utf-8'), signPars.encode('utf-8'), digestmod=hashlib.md5).hexdigest()  
    return sign  

#按照键名的升序排序, php里直接有ksort() 可以使用  
def ksort(d):  
    return [(k, d[k]) for k in sorted(d.keys())]  

下面是一些写法举例  
查询,比如查_id: 17的那条数据  
"command": {  
                        "$db": [  
                            {  
                                "$method": "collection",  
                                "$param": ["表名"]  
                            }, {  
                                "$method": "where",  
                                "$param": [{"_id": 17}]  
                            }, {  
                                "$method": "get",  
                                "$param": []  
                            }  
                        ]  
                    }  

删除, 比如删除_id: 17的那条数据  
"command": {  
                        "$db": [  
                            {  
                                "$method": "collection",  
                                "$param": ["表名"]  
                            }, {  
                                "$method": "where",  
                                "$param": [{"_id": 17}]  
                            }, {  
                                "$method": "remove",  
                                "$param": []  
                            }  
                        ]  
                    },  

改, 修改_id:17的那条数据  
"command": {  
                        "$db": [  
                            {  
                                "$method": "collection",  
                                "$param": ["表名"]  
                            }, {  
                                "$method": "where",  
                                "$param": [{"_id": 17]  
                            }, {  
                                "$method": "update",  
                                "$param": [{"字段1":"字段值1"}]  
                            }  
                        ]  
                    }
继续阅读 »

只贴下python的insert数据库的操作, 其他语言类似
免费版的url = 'https://api.bspapp.com/client'
收费版的是url = 'https://api.next.bspapp.com/client'自己替换下

import requests  
import json  
import time  
import hmac  
import hashlib  

def insert():  
    # accessToken是后面header需要的参数  
    accessToken = get_access_token()  
    url = 'https://api.bspapp.com/client'  
    payload = {  
        'method': 'serverless.function.runtime.invoke',  
        'params': json.dumps(  
            {  
                "functionTarget": "DCloud-clientDB",  
                "functionArgs": {  
                    "command": {  
                        "$db": [  
                            {  
                                "$method": "collection",  
                                "$param": ["表名"]  
                            }, {  
                                "$method": "add",                        #如果是update这里add就换成update. 写法类似于mongodb的  
                                "$param": [{"字段名1": "字段值1"}]  
                            }  
                        ]  
                    }  
                }  
            }  
        ),  
        # spaceId自己在web控制台找, timestamp是时间戳  
        'spaceId': spaceId,  
        'timestamp': int(round(time.time() * 1000)),  
        'token': accessToken,  
    }  
    headers = {  
        'content-type': 'application/json',  
        'x-basement-token': accessToken,  
        'x-serverless-sign': get_sign(payload),  
    }  
    payload = json.dumps(payload)  
    # 发送post请求  
    response = requests.post(url, data=payload, headers=headers)  
    result = json.loads(response.text)  
    return result  

#获取access_token的方法, access_token一段时间会过期  
def get_access_token():  
     url = 'https://api.bspapp.com/client'  
     payload = {  
           'method': 'serverless.auth.user.anonymousAuthorize',  
            'params': '{}',  
            'spaceId': spaceId,  
            'timestamp': int(round(time.time() * 1000)),  
      }  
      headers = {  
             'Content-Type': 'application/json',  
              'x-serverless-sign': get_sign(payload)  
      }  

      payload = json.dumps(payload)  
      response = requests.post(url, data=payload, headers=headers)  
      result = json.loads(response.text)  

      access_token = result['data']['accessToken']  
      return access_token   

# 签名参数  
def get_sign(param):  
    #按照键名的升序排序  
    param = ksort(param)  
    #键与值 等号拼接的数组, 结果如["键1=值1", "键2=值2", "键3=值3"...]  
    signList = []  
    for k, v in param:  
        if v != '':  
            signList.append(k + '=' + str(v))  
    # 每个参数对拼接&并连在一起的字符串, 结果如 "键1=值1&键2=值2&键3=值3"...  
    signPars = '&'.join(signList)  
    #md5 hmac加密, clientSecret自己的web控制台里找, hmac, hashlib是python自带的库..其他语言也应该有类似的  
    sign = hmac.new(clientSecret.encode('utf-8'), signPars.encode('utf-8'), digestmod=hashlib.md5).hexdigest()  
    return sign  

#按照键名的升序排序, php里直接有ksort() 可以使用  
def ksort(d):  
    return [(k, d[k]) for k in sorted(d.keys())]  

下面是一些写法举例  
查询,比如查_id: 17的那条数据  
"command": {  
                        "$db": [  
                            {  
                                "$method": "collection",  
                                "$param": ["表名"]  
                            }, {  
                                "$method": "where",  
                                "$param": [{"_id": 17}]  
                            }, {  
                                "$method": "get",  
                                "$param": []  
                            }  
                        ]  
                    }  

删除, 比如删除_id: 17的那条数据  
"command": {  
                        "$db": [  
                            {  
                                "$method": "collection",  
                                "$param": ["表名"]  
                            }, {  
                                "$method": "where",  
                                "$param": [{"_id": 17}]  
                            }, {  
                                "$method": "remove",  
                                "$param": []  
                            }  
                        ]  
                    },  

改, 修改_id:17的那条数据  
"command": {  
                        "$db": [  
                            {  
                                "$method": "collection",  
                                "$param": ["表名"]  
                            }, {  
                                "$method": "where",  
                                "$param": [{"_id": 17]  
                            }, {  
                                "$method": "update",  
                                "$param": [{"字段1":"字段值1"}]  
                            }  
                        ]  
                    }
收起阅读 »

【分享】微信内部浏览器跳转公众号引导用户关注

公众号

制作一个链接,点击该链接跳转到公众号关注页面。

1、从公众平台登进入公众号
2、点击开发>>开发者工具
3、F12 >>Elements
4、ctrl+f 搜索 uin_base64或在控制台window.wx.commonData.uin_base64
5、将下面链接的__biz=后面的值更换成uin_base64的值,然后用微信打开该链接即可。

https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=64位uin加密值&scene=110#wechat_redirect

示例:
https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzIzODU4NzkyOQ==&scene=110#wechat_redirect

继续阅读 »

制作一个链接,点击该链接跳转到公众号关注页面。

1、从公众平台登进入公众号
2、点击开发>>开发者工具
3、F12 >>Elements
4、ctrl+f 搜索 uin_base64或在控制台window.wx.commonData.uin_base64
5、将下面链接的__biz=后面的值更换成uin_base64的值,然后用微信打开该链接即可。

https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=64位uin加密值&scene=110#wechat_redirect

示例:
https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzIzODU4NzkyOQ==&scene=110#wechat_redirect

收起阅读 »