HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

【解决方案】HBuilderX在Mac最新系统Mojave上出现的一些问题对应解决方法

mojave Mac HBuilderX

目前升级到mac最新系统mojave后部分同学出现了几个问题如下:

  1. 界面字体出现模糊
  2. 右键打开文件所在目录比较慢
  3. 升级后启动不了

最新版已解决,请升级到1.3.2最新版。

目前升级到mac最新系统mojave后部分同学出现了几个问题如下:

  1. 界面字体出现模糊
  2. 右键打开文件所在目录比较慢
  3. 升级后启动不了

最新版已解决,请升级到1.3.2最新版。

ios本地打包缓存图片路径不一致?

本地打包

真机显示不了图片,模拟器可以显示图片,后来发觉是两个的路径不一致,但是同样的代码怎么会不一致呢??

真机路径:

模拟器路径:

真机显示不了图片,模拟器可以显示图片,后来发觉是两个的路径不一致,但是同样的代码怎么会不一致呢??

真机路径:

模拟器路径:

【插件分享】uni-app 图片压缩插件(H5端带图片方向修正)

插件 base64 图片压缩 uniapp

uni-app 图片压缩插件
作者:诗小柒

使用说明和下载地址 https://github.com/q310550690/uni-app-cpimg

实测4M的图片大小可以压缩到 200kb以内

继续阅读 »

uni-app 图片压缩插件
作者:诗小柒

使用说明和下载地址 https://github.com/q310550690/uni-app-cpimg

实测4M的图片大小可以压缩到 200kb以内

收起阅读 »

iOS切换到后台支持音乐播放功能,在前辈的基础上加工!

iOS

参考文章:
iOS切换到后台支持音乐播放功能
http://ask.dcloud.net.cn/article/42
该文章的说法是正确的

在设置完上文档东西后,在配置文件中添加权限

到了这一步,安卓app 就已经可以执行了;but ios包 还差一步,
我的ios是 ipone6s,我在系统页面添加了一个自动执行方法,需要把背景播放给带动一次,如图:

该图片的代码与后台转入代码为2套代码,图片中的代码的作用是,在进入系统后,把音频文件给执行一次。
function onPlusReady() {
document.addEventListener("pause", onAppPause, false);
document.addEventListener("resume", onAppReume, false);
}
//app 转入后台
function onAppPause() {
console.log("Application paused!");
startPlay();
}
function startPlay() {
if(plus.audio == undefined) {
alert("Device not ready!");
}
p = plus.audio.createPlayer("mp3/silent.mp3");
p.play(function() {
// alert("Audio play success!");
t = setTimeout(function() {
startPlay();
}, 6000);
}, function(e) {
// alert("Audio play error: " + e.message);
stopPlay();
});
}

按照上面方法,我的ios测试成功,至于其他的ios版本 我没有验证

继续阅读 »

参考文章:
iOS切换到后台支持音乐播放功能
http://ask.dcloud.net.cn/article/42
该文章的说法是正确的

在设置完上文档东西后,在配置文件中添加权限

到了这一步,安卓app 就已经可以执行了;but ios包 还差一步,
我的ios是 ipone6s,我在系统页面添加了一个自动执行方法,需要把背景播放给带动一次,如图:

该图片的代码与后台转入代码为2套代码,图片中的代码的作用是,在进入系统后,把音频文件给执行一次。
function onPlusReady() {
document.addEventListener("pause", onAppPause, false);
document.addEventListener("resume", onAppReume, false);
}
//app 转入后台
function onAppPause() {
console.log("Application paused!");
startPlay();
}
function startPlay() {
if(plus.audio == undefined) {
alert("Device not ready!");
}
p = plus.audio.createPlayer("mp3/silent.mp3");
p.play(function() {
// alert("Audio play success!");
t = setTimeout(function() {
startPlay();
}, 6000);
}, function(e) {
// alert("Audio play error: " + e.message);
stopPlay();
});
}

按照上面方法,我的ios测试成功,至于其他的ios版本 我没有验证

收起阅读 »

一个vx改变你的一生

HTML5

A40-11-15
亲,我想说,假如你想要贝兼钅戋,请务必认真花5分钟看完本文,有很多朋友看完之后,过几天想再来了解的时候已经找不到网页了,建议先添+薇..信好友:san558889百问百答,请添加计划导师曰贝兼千圆不是梦,注意:让你先交学费的100%是骗子;真正的贝兼钅戋项目,都是自己摸索出来的,无需任何费用。
我的一个朋友叫王丽娜,是江苏苏州人,平常也是一个上班族,工资只有三四千,但是,自从去年10月份无意间加了一个老师薇..信号:san558889加入后了解到一个新的贝兼钅戋方法,这个新的贝兼钅戋方法操作非常简单,手机就可以随时随地扌喿作,她开始的时候就是从100圆开始的,抱着半信半疑的心态,没想到居然用这100圆贝兼了10000圆,这让她非常兴奋,还想着会不会是有问题,没想到她立刻提现,10000圆很快就到自己的钅艮行卡上,现在,她靠每天上下班和业余的时间,每天操作几个小时,一个月轻..松过十W,实在是令人羡慕不已。
天天上班,努力工作,但是钅戋依然不够花。
每月就那么一点点工资,还要买化妆品、买衣服、买鞋,还要还房贷、还车贷以及还不完的其它各种贷。
生活总是给我们太多的不如意,每天忙忙碌碌
如果你想改变自己现在贫穷的状况,不花一分钅戋就能学习到别人的成功秘诀,让自己也踏入富豪的行列。
当你看到这篇文章的时候,你现在正拿着手机打开薇..信,看着文章。现在我们很多人玩薇..信的时候有事没事刷刷朋友圈,发个心情、发张照片、评论下好友、调侃下小伙伴,随着越来越多的人对薇..信犹如“吸食了大嘛”,中du不浅。
而你可知,其实在薇..信之下还隐藏了一个教你贝兼钅戋的法宝。不过这当然不是薇..信代贝勾,感兴趣的可以加他薇..信:san558889
一个薇..信改变你的一生!
用心指导,随时掌技巧,贝兼钅戋轻松实现掌上致富
扫描二维玛识别贝兼钅戋号,开启您的财富人生

继续阅读 »

A40-11-15
亲,我想说,假如你想要贝兼钅戋,请务必认真花5分钟看完本文,有很多朋友看完之后,过几天想再来了解的时候已经找不到网页了,建议先添+薇..信好友:san558889百问百答,请添加计划导师曰贝兼千圆不是梦,注意:让你先交学费的100%是骗子;真正的贝兼钅戋项目,都是自己摸索出来的,无需任何费用。
我的一个朋友叫王丽娜,是江苏苏州人,平常也是一个上班族,工资只有三四千,但是,自从去年10月份无意间加了一个老师薇..信号:san558889加入后了解到一个新的贝兼钅戋方法,这个新的贝兼钅戋方法操作非常简单,手机就可以随时随地扌喿作,她开始的时候就是从100圆开始的,抱着半信半疑的心态,没想到居然用这100圆贝兼了10000圆,这让她非常兴奋,还想着会不会是有问题,没想到她立刻提现,10000圆很快就到自己的钅艮行卡上,现在,她靠每天上下班和业余的时间,每天操作几个小时,一个月轻..松过十W,实在是令人羡慕不已。
天天上班,努力工作,但是钅戋依然不够花。
每月就那么一点点工资,还要买化妆品、买衣服、买鞋,还要还房贷、还车贷以及还不完的其它各种贷。
生活总是给我们太多的不如意,每天忙忙碌碌
如果你想改变自己现在贫穷的状况,不花一分钅戋就能学习到别人的成功秘诀,让自己也踏入富豪的行列。
当你看到这篇文章的时候,你现在正拿着手机打开薇..信,看着文章。现在我们很多人玩薇..信的时候有事没事刷刷朋友圈,发个心情、发张照片、评论下好友、调侃下小伙伴,随着越来越多的人对薇..信犹如“吸食了大嘛”,中du不浅。
而你可知,其实在薇..信之下还隐藏了一个教你贝兼钅戋的法宝。不过这当然不是薇..信代贝勾,感兴趣的可以加他薇..信:san558889
一个薇..信改变你的一生!
用心指导,随时掌技巧,贝兼钅戋轻松实现掌上致富
扫描二维玛识别贝兼钅戋号,开启您的财富人生

收起阅读 »

ios实现udp的接收与发送真机调试没问题,打包安装后不行

iOS打包


ios调用GCDAsyncUdpSocket实现udp的接收与发送,数据线连接真机调试可正常使用,打包ipa安装后,出现弹出以下提示框,请问是什么原因,有大神遇到过吗?

继续阅读 »


ios调用GCDAsyncUdpSocket实现udp的接收与发送,数据线连接真机调试可正常使用,打包ipa安装后,出现弹出以下提示框,请问是什么原因,有大神遇到过吗?

收起阅读 »

集成百度语音rest demo

看地址源码 https://github.com/rs1314/dcloud-baidu-ai

看地址源码 https://github.com/rs1314/dcloud-baidu-ai

集成百度语音安卓sdk demo

看地址源码 https://github.com/rs1314/dcloud-android-baidu-yuyin

看地址源码 https://github.com/rs1314/dcloud-android-baidu-yuyin

MUI开发小米商城视频教程 附源码和笔记

mui


MUI开发小米商城视频教程 附源码和笔记,学习一下MUI如何快速开发webapp商城,大牛手把手教你制作开发首页、发现页、分类页等

主要课程如下:
mui框架的基本使用
常用组件的使用,包括轮播组件、懒加载、下拉加载和节流函数
小米商城的实现

下载地址:http://www.sucaihuo.com/video/260.html

继续阅读 »


MUI开发小米商城视频教程 附源码和笔记,学习一下MUI如何快速开发webapp商城,大牛手把手教你制作开发首页、发现页、分类页等

主要课程如下:
mui框架的基本使用
常用组件的使用,包括轮播组件、懒加载、下拉加载和节流函数
小米商城的实现

下载地址:http://www.sucaihuo.com/video/260.html

收起阅读 »

uni-app的H5版使用注意事项

uni_app HBuilderX h5

uni-app x的web版运行注意事项,另见https://doc.dcloud.net.cn/uni-app-x/web/

HBuilderX 1.2开始包含了uni-app的web平台支持。

使用方式

  1. 打开uni-app项目下的vue文件
  2. 点击菜单 运行->运行到浏览器->Chrome
  3. 在Chrome內打开调试模式(右键->检查)开启设备模拟,模拟移动设备(如果UI变形刷新即可)
  4. HBuilderX修改代码后会自动刷新chrome的页面
  5. 审查元素

    在chrome控制台安装vue devtools后可查看节点关系。
    安装方式自行搜索。
    每个页面都在page节点下,pageHead是微信和app下的原生导航栏,即pages.json里配的导航栏。
    pageBody是导航栏下的页面内容。
    所有标签为了避免和标准H5标签冲突,都加了U前缀。
  6. 断点debug
    点chrome控制台的source,可以给js打断点调试。
    找到同名的文件,如果没有同名vue文件,一般会有一个同文件名的js文件,此时会提示检测到sourcemap,是否引入,点允许。然后就会有同名的vue文件。如果找不到,则把焦点放到source的代码区,然后敲ctrl+p打开文件查找窗口,然后敲入vue页面名字,然后打开vue页面。
    这个vue里,只有js,没有tag和css,但可以打断点调试。



发布方式

  1. 配置发行后的路径(发行在网站根目录可不配置),比如发行网站路径是www.xxx.com/html5,在manifest.json可视化界面 - H5配置 - 运行的基础路径中设置,也可以在源码视图内编辑h5节点,router下增加base属性为html5。
    可视化界面设置:

    源码视图设置:
  2. 点击菜单 发行->H5
  3. 在当下项目下的unpackage/dist/build/h5目录找到出的资源,部署服务器(或者使用本地服务器预览,不要直接在浏览器打开html文件)。如果发布使用的history模式,需要服务端配合,参考:后端配置方式

跨端注意

uni-app由uni的通用api和平台专有api组成,H5版也不例外。可以使用uni的通用api完成很多工作,也可以在条件编译里调用H5版的浏览器专有api。
虽然dom、window都可以用了,但如果要跨端,还是少写这样的代码好。
H5仍应该使用pages.json管理页面,强烈不建议使用浏览器的跳转页面的api。
H5的条件编译写法是把之前的app-plus换成H5。敲ifdef会有代码助手提示。

//#ifdef H5  
this.titleHeight = 44  
//#endif

条件编译目前有7个平台,APP-PLUS、APP-PLUS-NVUE、MP-WEIXIN、H5、MP、MP-BAIDU、MP-ALIPAY。
其中APP-PLUS-NVUE是APP-PLUS的子集,用于weex下单独写专用代码。
为了方便多平台选择,还引入了~#ifndef~,也就是ifdef的not,反向选择。以及或语法,及||。这些命名都是c语言条件编译的标准命名。

// #ifndef H5  
console.log("这段代码编译到非H5平台");  
// #endif

开发者之前为微信或app写的代码,H5的平台不支持时,需要注意把这些代码放到条件编译里。
经过这样的处理,之前做好的App或小程序才能正常运行到H5版里。

小程序版在UI上,尤其是导航栏上限制较多,H5在这里是参考了app,默认解析了pages.json下的app-plus的节点,实现了titleNView、buttons、下拉刷新(下拉刷新只有circle方式,因为只有这样的下拉刷新在H5版上可以保障流畅体验)

组件和API支持情况

目前的H5版,还没有100%实现uni的所有api,但大部分已经完成,具体参考uniapp文档。

第三方组件支持

  • 支持mpvue组件
  • 支持普通vue组件(仅H5平台)
  • 支持微信小程序组件(HBuilderX2.5.0+开始支持编译到H5)
  • 支持nvue

vue语法支持

H5版支持完整的vue语法,同时校验器也校验了更严格的vue语法,有些写法不规范会报警。比如data后面写对象会报警,必须写function。

注意事项(必看)

  • 编译为H5版后生成的是单页应用,SPA。如果想要seo优化,首页可以在template模板中配置keyword。二级页不支持配置。但一个更酷的方式是用uni-app直接发布一版百度小程序,搜索权重更高。
  • 编译后看日志和错误,要看浏览器的控制台,而不是HBuilderX的控制台。浏览器的控制台会有错误提示。
  • 网络请求(request、uploadFile、downloadFile等)在浏览器存在跨域限制(CORS、Cross-Origin),解决方案详见:https://ask.dcloud.net.cn/article/35267
  • APP 和微信的原生导航栏和tabbar下,元素区域坐标是不包含原生导航栏和tabbar的。而 H5 里原生导航栏和tabbar是 div 模拟实现的,所以元素坐标会包含导航栏和tabbar的高度。为了优雅的解决多端高度定位问题,uni-app新增了2个css变量:--window-top和--window-bottom,这代表了页面的内容区域距离顶部和底部的距离。举个实例,如果你想在原生tabbar上方悬浮一个菜单,之前写bottom:0。这样的写法编译到h5后,这个菜单会和tabbar重叠,位于屏幕底部。而改为使用bottom:var(--window-bottom),则不管在app下还是在h5下,这个菜单都是悬浮在tabbar上浮的。这就避免了写条件编译代码。当然你也仍然可以使用 H5 的条件编译处理界面的不同。
  • CSS內使用vh单位的时候注意100vh包含导航栏,使用时需要减去导航栏和tabBar高度,部分浏览器还包含浏览器操作栏高度,使用时请注意。
  • event 对象上使用的 mpvue 独有的属性需调整(比如 event.pageY,可能需要加上44px的导航栏高度)。
  • fixed定位的组件有可能遮挡框架内置UI组件,如果不希望遮挡可以分平台判断,在H5平台避开内置UI。
  • 正常支持rpx。px是真实物理像素。暂不支持通过设manifest的"transformPx" : true,把px当动态单位使用。
  • 使用罗盘、地理位置、加速计等相关接口需要使用https协议,本地预览(localhost)可以使用 http 协议。
  • PC 端 Chrome 浏览器模拟器设备测试的时候,获取定位 API 需要连接谷歌服务器,需要翻墙。
  • 组件内(页面除外)不支持onLoad生命周期。
  • 为避免和内置组件冲突,自定义组件请加上前缀(但不能是u和uni)。比如可使用的自定义组件名称:my-view、m-input、we-icon,例如不可使用的自定义组件名称:u-view、uni-input。如果已有项目使用了可能造成冲突的名称,请修改名称。另外微信小程序下自定义组件名称不能以wx开头。
  • 在tabBar页面,如果page高度设置为100%时,页面超出滚动会导致底部被tabbar遮挡,可在tabbar页面去掉height:100%或者改用min-height:100%。
  • 编写组件时需要遵守vue的规范,之前在app端和小程序端能使用的一些不规范写法需要纠正,比如:不要修改props的值、组件最外层template节点下不允许包含多个节点。
  • 开发App时,不可在H5预览后直接云打包。需在HBuilderX里点运行-选择运行到手机,真机调试无误后再打包。
  • H5端 “网络不给力” 原因及解决办法:https://ask.dcloud.net.cn/article/37065。

相关

uni-app编译H5底层技术解析:https://juejin.im/post/5c1b0d715188256973244377

继续阅读 »

uni-app x的web版运行注意事项,另见https://doc.dcloud.net.cn/uni-app-x/web/

HBuilderX 1.2开始包含了uni-app的web平台支持。

使用方式

  1. 打开uni-app项目下的vue文件
  2. 点击菜单 运行->运行到浏览器->Chrome
  3. 在Chrome內打开调试模式(右键->检查)开启设备模拟,模拟移动设备(如果UI变形刷新即可)
  4. HBuilderX修改代码后会自动刷新chrome的页面
  5. 审查元素

    在chrome控制台安装vue devtools后可查看节点关系。
    安装方式自行搜索。
    每个页面都在page节点下,pageHead是微信和app下的原生导航栏,即pages.json里配的导航栏。
    pageBody是导航栏下的页面内容。
    所有标签为了避免和标准H5标签冲突,都加了U前缀。
  6. 断点debug
    点chrome控制台的source,可以给js打断点调试。
    找到同名的文件,如果没有同名vue文件,一般会有一个同文件名的js文件,此时会提示检测到sourcemap,是否引入,点允许。然后就会有同名的vue文件。如果找不到,则把焦点放到source的代码区,然后敲ctrl+p打开文件查找窗口,然后敲入vue页面名字,然后打开vue页面。
    这个vue里,只有js,没有tag和css,但可以打断点调试。



发布方式

  1. 配置发行后的路径(发行在网站根目录可不配置),比如发行网站路径是www.xxx.com/html5,在manifest.json可视化界面 - H5配置 - 运行的基础路径中设置,也可以在源码视图内编辑h5节点,router下增加base属性为html5。
    可视化界面设置:

    源码视图设置:
  2. 点击菜单 发行->H5
  3. 在当下项目下的unpackage/dist/build/h5目录找到出的资源,部署服务器(或者使用本地服务器预览,不要直接在浏览器打开html文件)。如果发布使用的history模式,需要服务端配合,参考:后端配置方式

跨端注意

uni-app由uni的通用api和平台专有api组成,H5版也不例外。可以使用uni的通用api完成很多工作,也可以在条件编译里调用H5版的浏览器专有api。
虽然dom、window都可以用了,但如果要跨端,还是少写这样的代码好。
H5仍应该使用pages.json管理页面,强烈不建议使用浏览器的跳转页面的api。
H5的条件编译写法是把之前的app-plus换成H5。敲ifdef会有代码助手提示。

//#ifdef H5  
this.titleHeight = 44  
//#endif

条件编译目前有7个平台,APP-PLUS、APP-PLUS-NVUE、MP-WEIXIN、H5、MP、MP-BAIDU、MP-ALIPAY。
其中APP-PLUS-NVUE是APP-PLUS的子集,用于weex下单独写专用代码。
为了方便多平台选择,还引入了~#ifndef~,也就是ifdef的not,反向选择。以及或语法,及||。这些命名都是c语言条件编译的标准命名。

// #ifndef H5  
console.log("这段代码编译到非H5平台");  
// #endif

开发者之前为微信或app写的代码,H5的平台不支持时,需要注意把这些代码放到条件编译里。
经过这样的处理,之前做好的App或小程序才能正常运行到H5版里。

小程序版在UI上,尤其是导航栏上限制较多,H5在这里是参考了app,默认解析了pages.json下的app-plus的节点,实现了titleNView、buttons、下拉刷新(下拉刷新只有circle方式,因为只有这样的下拉刷新在H5版上可以保障流畅体验)

组件和API支持情况

目前的H5版,还没有100%实现uni的所有api,但大部分已经完成,具体参考uniapp文档。

第三方组件支持

  • 支持mpvue组件
  • 支持普通vue组件(仅H5平台)
  • 支持微信小程序组件(HBuilderX2.5.0+开始支持编译到H5)
  • 支持nvue

vue语法支持

H5版支持完整的vue语法,同时校验器也校验了更严格的vue语法,有些写法不规范会报警。比如data后面写对象会报警,必须写function。

注意事项(必看)

  • 编译为H5版后生成的是单页应用,SPA。如果想要seo优化,首页可以在template模板中配置keyword。二级页不支持配置。但一个更酷的方式是用uni-app直接发布一版百度小程序,搜索权重更高。
  • 编译后看日志和错误,要看浏览器的控制台,而不是HBuilderX的控制台。浏览器的控制台会有错误提示。
  • 网络请求(request、uploadFile、downloadFile等)在浏览器存在跨域限制(CORS、Cross-Origin),解决方案详见:https://ask.dcloud.net.cn/article/35267
  • APP 和微信的原生导航栏和tabbar下,元素区域坐标是不包含原生导航栏和tabbar的。而 H5 里原生导航栏和tabbar是 div 模拟实现的,所以元素坐标会包含导航栏和tabbar的高度。为了优雅的解决多端高度定位问题,uni-app新增了2个css变量:--window-top和--window-bottom,这代表了页面的内容区域距离顶部和底部的距离。举个实例,如果你想在原生tabbar上方悬浮一个菜单,之前写bottom:0。这样的写法编译到h5后,这个菜单会和tabbar重叠,位于屏幕底部。而改为使用bottom:var(--window-bottom),则不管在app下还是在h5下,这个菜单都是悬浮在tabbar上浮的。这就避免了写条件编译代码。当然你也仍然可以使用 H5 的条件编译处理界面的不同。
  • CSS內使用vh单位的时候注意100vh包含导航栏,使用时需要减去导航栏和tabBar高度,部分浏览器还包含浏览器操作栏高度,使用时请注意。
  • event 对象上使用的 mpvue 独有的属性需调整(比如 event.pageY,可能需要加上44px的导航栏高度)。
  • fixed定位的组件有可能遮挡框架内置UI组件,如果不希望遮挡可以分平台判断,在H5平台避开内置UI。
  • 正常支持rpx。px是真实物理像素。暂不支持通过设manifest的"transformPx" : true,把px当动态单位使用。
  • 使用罗盘、地理位置、加速计等相关接口需要使用https协议,本地预览(localhost)可以使用 http 协议。
  • PC 端 Chrome 浏览器模拟器设备测试的时候,获取定位 API 需要连接谷歌服务器,需要翻墙。
  • 组件内(页面除外)不支持onLoad生命周期。
  • 为避免和内置组件冲突,自定义组件请加上前缀(但不能是u和uni)。比如可使用的自定义组件名称:my-view、m-input、we-icon,例如不可使用的自定义组件名称:u-view、uni-input。如果已有项目使用了可能造成冲突的名称,请修改名称。另外微信小程序下自定义组件名称不能以wx开头。
  • 在tabBar页面,如果page高度设置为100%时,页面超出滚动会导致底部被tabbar遮挡,可在tabbar页面去掉height:100%或者改用min-height:100%。
  • 编写组件时需要遵守vue的规范,之前在app端和小程序端能使用的一些不规范写法需要纠正,比如:不要修改props的值、组件最外层template节点下不允许包含多个节点。
  • 开发App时,不可在H5预览后直接云打包。需在HBuilderX里点运行-选择运行到手机,真机调试无误后再打包。
  • H5端 “网络不给力” 原因及解决办法:https://ask.dcloud.net.cn/article/37065。

相关

uni-app编译H5底层技术解析:https://juejin.im/post/5c1b0d715188256973244377

收起阅读 »

mui使用百度语音合成来制作文字转语音来播放

文字转语音

百度语音合成中有对应的webapi可以使用,这个相对比较简单,废话不多说直接上代码吧。代码比较简单,老规矩不懂的在下方评论留言,觉得好就点个赞,转发请注明出处:https://blog.csdn.net/baidu_21919557;

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    <title></title>
    <script src="js/mui.min.js"></script>
    <link href="css/mui.min.css" rel="stylesheet"/>
   
</head>
<body>
    <div id="">
        <textarea id="content" name="" rows="3" cols="20" style="top: 20px;height: 600px;"></textarea>
        <input id="play" type="button" class="mui-btn mui-btn-block mui-btn-blue" style="height: 50px;" value="播放"></input>
        <input id="puase" type="button" class="mui-btn mui-btn-block mui-btn-blue" style="height: 50px;" value="暂停"></input>
    </div>
     <script type="text/javascript" charset="utf-8">
          var tokenUrl = "https://openapi.baidu.com/oauth/2.0/token";
        var client_id = "client_id ";//此处为申请的client_id;
        var client_secret = "client_secret ";/此处为申请的client_secret ;
        var access_token;
        var data = "grant_type=client_credentials&client_id="+client_id+"&client_secret="+client_secret;
        var p = document.createElement("audio");//创建一个潜在的audio播放器
          mui("body").on("tap","#play",function(){
              var tex = document.getElementById("content").value.replace(/[\r\n]/g,"").replace(/\ +/g,"").replace(/-/g, '').trim();//对文本进行去空格和换行;
            var a=0,b=0,c=0;
            var contentArray = new Array();
            if(tex.length/500>=0){//接口上传限制字数,避免出现接口腻出,限制上传字数
                for (var i = 0; i < tex.length/500; i++) {
                    a = a + 500;
                    splitTex = tex.slice(b,a);
                    b=a;
                    contentArray.push(splitTex);
                }
            }
              mui.ajax({
                type:"get",
                url:tokenUrl,
                data:data,
                async:true,
                success:function(resp){
                    if(resp.access_token){
                        access_token = resp.access_token;
                        var shibieUrl = "http://tsn.baidu.com/text2audio";
                        tex = encodeURI(encodeURI(contentArray[0]));
                        var data = "tex="+tex+"&tok="+access_token+"&cuid=00:00:00:00:00:00&ctp=1&lan=zh&spd=5&pit=5&vol=5&per=0&aue=3";
                          p.controls="controls";
                        p.src = shibieUrl+"?"+data;
                        p.play();
                        c++;
                    }else{
                    }
                },
                error:function(error){
                }
            });
            setTimeout(function(){
                p.addEventListener('ended', function () {  
                    if(contentArray.length>0&&c<=contentArray.length){
                        var shibieUrl = "http://tsn.baidu.com/text2audio";
                        tex = encodeURI(encodeURI(contentArray[c]));
                        var data = "tex="+tex+"&tok="+access_token+"&cuid=00:00:00:00:00:00&ctp=1&lan=zh&spd=5&pit=5&vol=5&per=0&aue=3";
                        p.src = shibieUrl+"?"+data;
                        p.play();
                        c++;
                    }else{
                        c=0;
                    }
                });
            },500);
          });
          mui("body").on("tap","#puase",function(){
               if(p.paused)                     {                 
                  p.play();
              }else{
               p.pause();
              }
              
          });
    </script>
</body>
</html>

继续阅读 »

百度语音合成中有对应的webapi可以使用,这个相对比较简单,废话不多说直接上代码吧。代码比较简单,老规矩不懂的在下方评论留言,觉得好就点个赞,转发请注明出处:https://blog.csdn.net/baidu_21919557;

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    <title></title>
    <script src="js/mui.min.js"></script>
    <link href="css/mui.min.css" rel="stylesheet"/>
   
</head>
<body>
    <div id="">
        <textarea id="content" name="" rows="3" cols="20" style="top: 20px;height: 600px;"></textarea>
        <input id="play" type="button" class="mui-btn mui-btn-block mui-btn-blue" style="height: 50px;" value="播放"></input>
        <input id="puase" type="button" class="mui-btn mui-btn-block mui-btn-blue" style="height: 50px;" value="暂停"></input>
    </div>
     <script type="text/javascript" charset="utf-8">
          var tokenUrl = "https://openapi.baidu.com/oauth/2.0/token";
        var client_id = "client_id ";//此处为申请的client_id;
        var client_secret = "client_secret ";/此处为申请的client_secret ;
        var access_token;
        var data = "grant_type=client_credentials&client_id="+client_id+"&client_secret="+client_secret;
        var p = document.createElement("audio");//创建一个潜在的audio播放器
          mui("body").on("tap","#play",function(){
              var tex = document.getElementById("content").value.replace(/[\r\n]/g,"").replace(/\ +/g,"").replace(/-/g, '').trim();//对文本进行去空格和换行;
            var a=0,b=0,c=0;
            var contentArray = new Array();
            if(tex.length/500>=0){//接口上传限制字数,避免出现接口腻出,限制上传字数
                for (var i = 0; i < tex.length/500; i++) {
                    a = a + 500;
                    splitTex = tex.slice(b,a);
                    b=a;
                    contentArray.push(splitTex);
                }
            }
              mui.ajax({
                type:"get",
                url:tokenUrl,
                data:data,
                async:true,
                success:function(resp){
                    if(resp.access_token){
                        access_token = resp.access_token;
                        var shibieUrl = "http://tsn.baidu.com/text2audio";
                        tex = encodeURI(encodeURI(contentArray[0]));
                        var data = "tex="+tex+"&tok="+access_token+"&cuid=00:00:00:00:00:00&ctp=1&lan=zh&spd=5&pit=5&vol=5&per=0&aue=3";
                          p.controls="controls";
                        p.src = shibieUrl+"?"+data;
                        p.play();
                        c++;
                    }else{
                    }
                },
                error:function(error){
                }
            });
            setTimeout(function(){
                p.addEventListener('ended', function () {  
                    if(contentArray.length>0&&c<=contentArray.length){
                        var shibieUrl = "http://tsn.baidu.com/text2audio";
                        tex = encodeURI(encodeURI(contentArray[c]));
                        var data = "tex="+tex+"&tok="+access_token+"&cuid=00:00:00:00:00:00&ctp=1&lan=zh&spd=5&pit=5&vol=5&per=0&aue=3";
                        p.src = shibieUrl+"?"+data;
                        p.play();
                        c++;
                    }else{
                        c=0;
                    }
                });
            },500);
          });
          mui("body").on("tap","#puase",function(){
               if(p.paused)                     {                 
                  p.play();
              }else{
               p.pause();
              }
              
          });
    </script>
</body>
</html>

收起阅读 »