HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

【分享】uni-app 原生导航 titleNView 搜索框

贴子为以前的,官方已经集成了搜索框了
移步到这里看
https://uniapp.dcloud.io/collocation/pages?id=app-plus

经测试官方已修复安卓的BUG

以下是苹果的


以下是安卓的

操作方法,先配置是下page.json

        {  
            "path": "你的页面",  
            "style": {  
                "backgroundColorTop": "#ebebeb",  
                "backgroundColorBottom": "#ebebeb",  
                "app-plus": {  
                    "scrollIndicator": "none",  
                    "titleNView": {  
                        "titleText":"",//不要设置标题  
                        "buttons": [{  
                            "text": "取消",  
                            "fontSize": "14"  
                        }]  
                    }  
                }  
            }  
        }

不要设置标题,不然在安卓上就会显示出来,画的盖不住

以下操作在您要画搜索框的页面

在onload引用startcreatview就可以了

设置延迟,不做延迟会出现错误

            startcreatview(){  
                var s = this;  
                s.TitleTimer = setTimeout(function() {  
                    s.createView();  
                }, 100);//具体缓迟时间可以按需设置  
            },

            createView() {  
                clearTimeout(this.TitleTimer);  
                var s = this;  
                var pages = getCurrentPages();  
                var page = pages[pages.length - 1];  
                var currentWebview = page.$getAppWebview();  
                var nTitle = currentWebview.getTitleNView();  
                    nTitle.draw(  
                        [{  
                                "tag": "rect",  
                                "id": "rect",  
                                "color": "#999",  
                                "position": {  
                                    "left": "50px",  
                                    "right": "50px",  
                                    "top": "7px",  
                                    "bottom": "7px"  
                                },  
                                "rectStyles": {  
                                    "color": "#f6f6f6",  
                                    "radius": "30px",  
                                    "borderColor": "#999"  
                                }  
                            },  
                            {  
                                "tag": "font",  
                                "id": "font",  
                                "text": "\ue466",  
                                "position": {  
                                    "left": "55px",  
                                    "width": "30px",  
                                    "top": "7px",  
                                    "bottom": "7px"  
                                },  
                                "textStyles": {  
                                    "size": "13px",  
                                    "fontSrc": "/static/uni.ttf",  
                                    "color": "#999"  
                                }  
                            },  
                            {  
                                "tag": "input",  
                                "id": "input",  
                                "position": {  
                                    "left": "80px",  
                                    "right": "70px",  
                                    "top": "7px",  
                                    "bottom": "7px"  
                                },  
                                "inputStyles": {  
                                    "placeholder": "关键字搜索",  
                                    "borderRadius": "30px",  
                                    "borderWidth": "0px",  
                                    "fontSize": "13px",  
                                    "type": "search",  
                                    "fontSrc": "/static/uni.ttf",  
                                    "color": "#999",  
                                    onComplete: function(e) {  
                                        console.log('点击搜索执行' + e.text)  
                                    },  
                                    onFocus: function(e) {  
                                        console.log('获得焦点')  
                                    },  
                                    onBlur: function(e) {  
                                        console.log('失去焦点')  
                                    }  
                                }  
                            }  
                        ]  
                    );  
            },  

如果只需要一个假搜索框,把上面代码的inputStyles部份替换为
"textStyles": {
"size": "13px",
"fontSrc": "/static/uni.ttf",
"color": "#999"
}
同时添加监听假搜索框的点击事件nTitle.addEventListener('click', '点击事件', false);

继续阅读 »

贴子为以前的,官方已经集成了搜索框了
移步到这里看
https://uniapp.dcloud.io/collocation/pages?id=app-plus

经测试官方已修复安卓的BUG

以下是苹果的


以下是安卓的

操作方法,先配置是下page.json

        {  
            "path": "你的页面",  
            "style": {  
                "backgroundColorTop": "#ebebeb",  
                "backgroundColorBottom": "#ebebeb",  
                "app-plus": {  
                    "scrollIndicator": "none",  
                    "titleNView": {  
                        "titleText":"",//不要设置标题  
                        "buttons": [{  
                            "text": "取消",  
                            "fontSize": "14"  
                        }]  
                    }  
                }  
            }  
        }

不要设置标题,不然在安卓上就会显示出来,画的盖不住

以下操作在您要画搜索框的页面

在onload引用startcreatview就可以了

设置延迟,不做延迟会出现错误

            startcreatview(){  
                var s = this;  
                s.TitleTimer = setTimeout(function() {  
                    s.createView();  
                }, 100);//具体缓迟时间可以按需设置  
            },

            createView() {  
                clearTimeout(this.TitleTimer);  
                var s = this;  
                var pages = getCurrentPages();  
                var page = pages[pages.length - 1];  
                var currentWebview = page.$getAppWebview();  
                var nTitle = currentWebview.getTitleNView();  
                    nTitle.draw(  
                        [{  
                                "tag": "rect",  
                                "id": "rect",  
                                "color": "#999",  
                                "position": {  
                                    "left": "50px",  
                                    "right": "50px",  
                                    "top": "7px",  
                                    "bottom": "7px"  
                                },  
                                "rectStyles": {  
                                    "color": "#f6f6f6",  
                                    "radius": "30px",  
                                    "borderColor": "#999"  
                                }  
                            },  
                            {  
                                "tag": "font",  
                                "id": "font",  
                                "text": "\ue466",  
                                "position": {  
                                    "left": "55px",  
                                    "width": "30px",  
                                    "top": "7px",  
                                    "bottom": "7px"  
                                },  
                                "textStyles": {  
                                    "size": "13px",  
                                    "fontSrc": "/static/uni.ttf",  
                                    "color": "#999"  
                                }  
                            },  
                            {  
                                "tag": "input",  
                                "id": "input",  
                                "position": {  
                                    "left": "80px",  
                                    "right": "70px",  
                                    "top": "7px",  
                                    "bottom": "7px"  
                                },  
                                "inputStyles": {  
                                    "placeholder": "关键字搜索",  
                                    "borderRadius": "30px",  
                                    "borderWidth": "0px",  
                                    "fontSize": "13px",  
                                    "type": "search",  
                                    "fontSrc": "/static/uni.ttf",  
                                    "color": "#999",  
                                    onComplete: function(e) {  
                                        console.log('点击搜索执行' + e.text)  
                                    },  
                                    onFocus: function(e) {  
                                        console.log('获得焦点')  
                                    },  
                                    onBlur: function(e) {  
                                        console.log('失去焦点')  
                                    }  
                                }  
                            }  
                        ]  
                    );  
            },  

如果只需要一个假搜索框,把上面代码的inputStyles部份替换为
"textStyles": {
"size": "13px",
"fontSrc": "/static/uni.ttf",
"color": "#999"
}
同时添加监听假搜索框的点击事件nTitle.addEventListener('click', '点击事件', false);

收起阅读 »

【IOS】官方20180929版本SDK中Swift的Demo

Mac 10.14
Xcode 10.1

1、第一步下载https://github.com/devdawei/libstdc-,并执行install.sh

2、若如下错误

 "OBJC_CLASS$_QLPreviewController", referenced from: objc-class-ref in liblibWidget.a(PGRuntime.o) 

添加QuickLook.framework

3、若报如下错误


"OBJC_CLASS$_SKStoreProductViewController", referenced from:  

objc-class-ref in liblibPDRCore.a(DCH5ScreenAdvertising.o)  

"_SKStoreProductParameterITunesItemIdentifier", referenced from:  

-[DCH5ScreenAdvertising touchesEnded:withEvent:] in liblibPDRCore.a(DCH5ScreenAdvertising.o)  

ld: symbol(s) not found for architecture x86_64  

clang: error: linker command failed with exit code 1 (use -v to see invocation)  

添加 libIAPPay.a liblibPayment.a 两个文件

继续阅读 »

Mac 10.14
Xcode 10.1

1、第一步下载https://github.com/devdawei/libstdc-,并执行install.sh

2、若如下错误

 "OBJC_CLASS$_QLPreviewController", referenced from: objc-class-ref in liblibWidget.a(PGRuntime.o) 

添加QuickLook.framework

3、若报如下错误


"OBJC_CLASS$_SKStoreProductViewController", referenced from:  

objc-class-ref in liblibPDRCore.a(DCH5ScreenAdvertising.o)  

"_SKStoreProductParameterITunesItemIdentifier", referenced from:  

-[DCH5ScreenAdvertising touchesEnded:withEvent:] in liblibPDRCore.a(DCH5ScreenAdvertising.o)  

ld: symbol(s) not found for architecture x86_64  

clang: error: linker command failed with exit code 1 (use -v to see invocation)  

添加 libIAPPay.a liblibPayment.a 两个文件

收起阅读 »

热力图如何在前端实现

关于热力图的实现原理:
一般可大致归纳为以下几个步骤:
1.为每个数据点设置一个从中心向外灰度渐变的圆;
2.利用灰度可以叠加的原理,计算每个像素点数据交叉叠加得到的灰度值;
3.根据每个像素计算得到的灰度值,在一条彩色色带中进行颜色映射,最后对图像进行着色,得到热力图。
当热力图基于前端技术的具体实现时,又可分为以下四个步骤,接下来为大家详细解析:
1.准备热力图数据格式
由于热力图使用场景一般为地图,所以,数据源需要提供经纬度作为位置信息,以及count作为数据点的权重值。

2.在地图上填充数据
基于canvas绘制热力图时,热力图中每个数据点的半径大小会直接影响到热力图的展现效果,所以一般要结合使用地图的缩放级别以及数据精度来进行设置。

3.叠加显示,权重(密度)算法
上面的绘制结果中,因为没有使用到权重值,所以每个数据点圆的中心点灰度值都是1,不能直接用于颜色映射,需要根据离散点缓冲区的叠加来确定热力分布密度。每一个热点都有一个位置和权重,权重越大,则该点越显著,也就代表其渐变的一个衰变因素,此时,我们需要根据不同的count设置出不同的alpha值。本文主要根据count最小值对应alpha0,最大值对应1的映射计算方式,求得每个数据点,从而绘制出alpha:

4.颜色映射
根据画布上每个像素点累计得到的灰度值,可以从彩色映射色带中得到对应位置的颜色。
那么如何得到画布上每个像素点的信息呢?可以使用canvas提供的getImageData()方法,返回 ImageData 对象,该对象拷贝了画布指定矩形的像素数据。需要注意的是,ImageData对象中的每个像素,都包含RGBA四项信息:

继续阅读 »

关于热力图的实现原理:
一般可大致归纳为以下几个步骤:
1.为每个数据点设置一个从中心向外灰度渐变的圆;
2.利用灰度可以叠加的原理,计算每个像素点数据交叉叠加得到的灰度值;
3.根据每个像素计算得到的灰度值,在一条彩色色带中进行颜色映射,最后对图像进行着色,得到热力图。
当热力图基于前端技术的具体实现时,又可分为以下四个步骤,接下来为大家详细解析:
1.准备热力图数据格式
由于热力图使用场景一般为地图,所以,数据源需要提供经纬度作为位置信息,以及count作为数据点的权重值。

2.在地图上填充数据
基于canvas绘制热力图时,热力图中每个数据点的半径大小会直接影响到热力图的展现效果,所以一般要结合使用地图的缩放级别以及数据精度来进行设置。

3.叠加显示,权重(密度)算法
上面的绘制结果中,因为没有使用到权重值,所以每个数据点圆的中心点灰度值都是1,不能直接用于颜色映射,需要根据离散点缓冲区的叠加来确定热力分布密度。每一个热点都有一个位置和权重,权重越大,则该点越显著,也就代表其渐变的一个衰变因素,此时,我们需要根据不同的count设置出不同的alpha值。本文主要根据count最小值对应alpha0,最大值对应1的映射计算方式,求得每个数据点,从而绘制出alpha:

4.颜色映射
根据画布上每个像素点累计得到的灰度值,可以从彩色映射色带中得到对应位置的颜色。
那么如何得到画布上每个像素点的信息呢?可以使用canvas提供的getImageData()方法,返回 ImageData 对象,该对象拷贝了画布指定矩形的像素数据。需要注意的是,ImageData对象中的每个像素,都包含RGBA四项信息:

收起阅读 »

mui框架做的粉红风格服装包包商城网站模板

mui

mui框架做的粉红风格服装包包商城网站模板
这个风格时尚美观,比较适合卖女性商品
喜欢的朋友可以下载研究研究
下载地址:http://www.sucaihuo.com/templates/4490.html

继续阅读 »

mui框架做的粉红风格服装包包商城网站模板
这个风格时尚美观,比较适合卖女性商品
喜欢的朋友可以下载研究研究
下载地址:http://www.sucaihuo.com/templates/4490.html

收起阅读 »

关于JAVA开发HBuillder的微信支付(获取预支付订单后调起微信支付),经验分享

微信支付

本项目主要是集成微信支付,android APP请求java服务器获取预支付订单后调起微信支付。代码简单,亲测可用!
源码demo下载地址:
微信支付java服务端demo

主要是用于替换HBuillder H5+模板中的plus/payment.html文件中如下代码

var PAYSERVER='http://demo.dcloud.net.cn/payment/?payid=';

继续阅读 »

本项目主要是集成微信支付,android APP请求java服务器获取预支付订单后调起微信支付。代码简单,亲测可用!
源码demo下载地址:
微信支付java服务端demo

主要是用于替换HBuillder H5+模板中的plus/payment.html文件中如下代码

var PAYSERVER='http://demo.dcloud.net.cn/payment/?payid=';

收起阅读 »

uni-app 升级检测,客户端实现更新下载App自动安装

升级 升级更新

稍后整理描述后更新!

稍后整理描述后更新!

解决mui下拉刷新使用mui(querySelector).pullRefresh().setStopped(false);禁止和恢复的问题

共用模板,下拉刷新 下拉刷新

把你们的mui.min.js的源码部分修改如下

修改前


disablePullupToRefresh: function() {  
                            this._initPullupRefresh(), this.bottomPocket.className = "mui-pull-bottom-pocket "   e, window.removeEventListener("dragup", this)  
                        },  
                        enablePullupToRefresh: function() {  
                            this._initPullupRefresh(), this.bottomPocket.classList.remove(e), this.pullCaption.className = g   " "   h, this.pullCaption.innerHTML = this.options.up.contentdown, b.addEventListener("plusscrollbottom", this), window.addEventListener("dragup", this)  
                        }  

修改后


disablePullupToRefresh: function() {  
                            this._initPullupRefresh(), this.topPocket.className = "mui-pull-bottom-pocket "   e, window.removeEventListener("dragup", this)  
                        },  
                        enablePullupToRefresh: function() {  
                            this._initPullupRefresh(), this.topPocket.classList.remove(e), this.topCaption.className = g   " "   h, this.topCaption.innerHTML = this.options.up.contentdown, b.addEventListener("plusscrollbottom", this), window.addEventListener("dragup", this)  
                        }  

第一次发帖,有点激动。

继续阅读 »

把你们的mui.min.js的源码部分修改如下

修改前


disablePullupToRefresh: function() {  
                            this._initPullupRefresh(), this.bottomPocket.className = "mui-pull-bottom-pocket "   e, window.removeEventListener("dragup", this)  
                        },  
                        enablePullupToRefresh: function() {  
                            this._initPullupRefresh(), this.bottomPocket.classList.remove(e), this.pullCaption.className = g   " "   h, this.pullCaption.innerHTML = this.options.up.contentdown, b.addEventListener("plusscrollbottom", this), window.addEventListener("dragup", this)  
                        }  

修改后


disablePullupToRefresh: function() {  
                            this._initPullupRefresh(), this.topPocket.className = "mui-pull-bottom-pocket "   e, window.removeEventListener("dragup", this)  
                        },  
                        enablePullupToRefresh: function() {  
                            this._initPullupRefresh(), this.topPocket.classList.remove(e), this.topCaption.className = g   " "   h, this.topCaption.innerHTML = this.options.up.contentdown, b.addEventListener("plusscrollbottom", this), window.addEventListener("dragup", this)  
                        }  

第一次发帖,有点激动。

收起阅读 »

关于IOS缓存本地图片读取显示空白的问题解决办法

uniapp

说一下我的应用场景:
网络加载图片太多,所以考虑使用本地缓存。图片下载到本地后使用本地路径。
用到的接口:

// 检查本地是否已经存储  
plus.io.resolveLocalFileSystemURL  

// 下载文件  
plus.downloader.createDownload  

// 下载失败删除文件  
plus.io.resolveLocalFileSystemURL

存储地址使用:_downloads/xxx.jpg

得到的结果如楼主一样,安卓可以读取本地文件,iOS返回空白。

在群里问了半天,最后群主说建议使用uni的API
尝试方法:

// 下载文件  
uni.downloadFile(OBJECT)  

// 保存文件  
uni.saveFile(OBJECT)

通过这种方法,确实可以显示图片,但是有一个问题,就是无法自定义文件名,
下载的临时路径,文件名是使用时间戳命名的,存储到本地后也只能是这个文件名,如果我们要监测缓存,就需要去维护一个网络图片与本地图片的map关系,而且缓存删除更新,都需要更新这个map文件,相对复杂。

思考:为什么uni.saveFile返回的路径可以显示,是不是ios的相对路径不一样?

通过打印,发现uni.saveFile存储到路径在_doc/目录下,尝试把存储路径从_downloads改为_doc后,发现,问题解决了!
原来如此。

相关文档 相对路径URL

继续阅读 »

说一下我的应用场景:
网络加载图片太多,所以考虑使用本地缓存。图片下载到本地后使用本地路径。
用到的接口:

// 检查本地是否已经存储  
plus.io.resolveLocalFileSystemURL  

// 下载文件  
plus.downloader.createDownload  

// 下载失败删除文件  
plus.io.resolveLocalFileSystemURL

存储地址使用:_downloads/xxx.jpg

得到的结果如楼主一样,安卓可以读取本地文件,iOS返回空白。

在群里问了半天,最后群主说建议使用uni的API
尝试方法:

// 下载文件  
uni.downloadFile(OBJECT)  

// 保存文件  
uni.saveFile(OBJECT)

通过这种方法,确实可以显示图片,但是有一个问题,就是无法自定义文件名,
下载的临时路径,文件名是使用时间戳命名的,存储到本地后也只能是这个文件名,如果我们要监测缓存,就需要去维护一个网络图片与本地图片的map关系,而且缓存删除更新,都需要更新这个map文件,相对复杂。

思考:为什么uni.saveFile返回的路径可以显示,是不是ios的相对路径不一样?

通过打印,发现uni.saveFile存储到路径在_doc/目录下,尝试把存储路径从_downloads改为_doc后,发现,问题解决了!
原来如此。

相关文档 相对路径URL

收起阅读 »

Koa nuxt最佳实践前篇

微信小程序 小程序 nodejs node.js

从demo快速上手

首先我们下载demo

git clone https://github.com/doodooke/doodoo-nuxt-demo.git

进入目录安装依赖和启动

yarn install && npm run dev

访问浏览器http://127.0.0.1:3000

继续阅读 »

从demo快速上手

首先我们下载demo

git clone https://github.com/doodooke/doodoo-nuxt-demo.git

进入目录安装依赖和启动

yarn install && npm run dev

访问浏览器http://127.0.0.1:3000

收起阅读 »

tap点击一次出现2次效果的原因

点击事件 重复点击 连续点击

这个原因有几种,网上看了一下基本上都是说应用了2次js文件
但是我都代码应用了一次 还是出现了这个情况
仔细检查了一下发现了这个问题

mui('.mui-content').on('tap', '.ArticleJump', function() {

});

如果代码存在2个mui-conten类 mui-conten包裹了mui-conten 就会出现2次或者多少次点击效果

继续阅读 »

这个原因有几种,网上看了一下基本上都是说应用了2次js文件
但是我都代码应用了一次 还是出现了这个情况
仔细检查了一下发现了这个问题

mui('.mui-content').on('tap', '.ArticleJump', function() {

});

如果代码存在2个mui-conten类 mui-conten包裹了mui-conten 就会出现2次或者多少次点击效果

收起阅读 »

多多客小程序开源版一步安装教程

node.js 微信小程序 小程序

一步安装教程

打开 https://gitee.com/doodooke/doodoo,下载zip压缩包

执行命令

wget https://gitee.com/doodooke/doodoo/raw/master/shell/oneStepInstall.sh && chmod 755 ./oneStepInstall.sh && ./oneStepInstall.sh

1、检测环境

2、自动下载

3、安装依赖

4、系统配置

5、自动启动

继续阅读 »

一步安装教程

打开 https://gitee.com/doodooke/doodoo,下载zip压缩包

执行命令

wget https://gitee.com/doodooke/doodoo/raw/master/shell/oneStepInstall.sh && chmod 755 ./oneStepInstall.sh && ./oneStepInstall.sh

1、检测环境

2、自动下载

3、安装依赖

4、系统配置

5、自动启动

收起阅读 »

多多客小程序开源版8步快速安装教程(图文版)

nodejs node node.js 微信小程序 小程序

1、首先我们打开 https://gitee.com/doodooke/doodoo,下载zip压缩包

2、进入下载的代码目录,打开命令行

3、执行命令安装依赖yarn

4、创建数据库,配置数据库连接

5、执行命令启动项目npm run dev

6、打开浏览器访问http://127.0.0.1:3000,点击开源版下载

7、下载提示完成,执行命令npm run dev重启,打开浏览器访问http://127.0.0.1:3000

8、安装完成,配置.env和.env.web既可以配置完成,系统启动。

继续阅读 »

1、首先我们打开 https://gitee.com/doodooke/doodoo,下载zip压缩包

2、进入下载的代码目录,打开命令行

3、执行命令安装依赖yarn

4、创建数据库,配置数据库连接

5、执行命令启动项目npm run dev

6、打开浏览器访问http://127.0.0.1:3000,点击开源版下载

7、下载提示完成,执行命令npm run dev重启,打开浏览器访问http://127.0.0.1:3000

8、安装完成,配置.env和.env.web既可以配置完成,系统启动。

收起阅读 »