首页
学习
关于
友链
Search
1
小程序 蓝牙连接(出现的问题和一些解决方法)
311 阅读
2
颜色空间:RGB、HSV和HSL
131 阅读
3
小程序_连接蓝牙设备根据平台去打开定位权限
128 阅读
4
小程序 加快安卓手机向蓝牙设备发送大数据
92 阅读
5
侧边菜单切换的显示与隐藏,图标的 + 与 -
89 阅读
全部
感想
旅行
生活
学习
登录
Search
标签搜索
css
javascript
jquery
html
小程序
github
图床
假期
发布订阅
typecho
第一次
未来
快乐与忧伤
努力
奋斗
PicGo
倒计时
元旦
svg
vue
逸曦穆泽
累计撰写
35
篇文章
累计收到
2
条评论
首页
栏目
全部
感想
旅行
生活
学习
页面
学习
关于
友链
搜索到
35
篇与
全部
的结果
2022-04-30
小程序 正整数与char(character)的相互转换,十六进制与十进制相互转换
1、正整数转字符,String.fromCharCode(arr[i]),arr[i] 为正整数onLoad() { var array = [85, 4, 17, 0, 80, 80, 234, 170] let str = that.arrToCharacter(array); console.log("字符为:",str); // PP }, // 数组的数字转为 char arrToCharacter(arr) { let len = arr.length; var str = ''; for (var i = 0; i < len; i++) { // 取 80, 80 if(i >= 4 && i < len-2){ str += String.fromCharCode(arr[i]) + ""; } } return str; },2、字符转正整数 str.charCodeAt(i), str 为字符串,i 为索引onLoad: function (options) { let str = '<010109>'; // let str = "<A500>"; console.log("字符转整数",this.charToNum(str)) // 字符转整数 [60, 48, 49, 48, 49, 48, 57, 62] }, // 字符转整数 charToNum(str){ let len = str.length; let buffer = new ArrayBuffer(len) let dataView = new DataView(buffer) // var sum = ''; for (var i = 0; i < len; i++) { dataView.setUint8(i, str.charCodeAt(i)); // sum += str.charCodeAt(i) + ""; } return buffer; },3、十六进制与十进制相互转换// 十进制转为十六进制 // 方法一(缺点没有补0) decToHex(){ let num = 12; console.log(num.toString(16)); // 打印:c }, // 方法二(写在Page外面)在Page内调用 decToHex(12) => 打印:0c let decToHex = num => num <= 16 ? '0' + num.toString(16) : num.toString(16); // 十六进制转为十进制 // 写在Page外面 let sixteenToTen = hex => parseInt(hex.replace(/\s/g,""), 16); // 在Page内调用 hexToDec(){ let hex = "ab"; console.log(sixteenToTen(hex));// 打印:171 },
2022年04月30日
18 阅读
0 评论
0 点赞
2022-04-23
小程序 canvas 画布半圆环
效果图:2、wxml:<view class="fragrance_item"> <view class="fragPos"> <view class="fragNum">{{perfumePercent}}%</view> <view class="fragText">香水余量</view> </view> <view class="fragPsoReset"> <view bindtap="resetTab" class="fragReset" hover-class="fragModel_hover"> <image class="fragReset_icon" src="/static/image/reset.png" mode="widthFix"> </image> <view>复位</view> </view> </view> <view class="fragRing"> <canvas id="perfumeBalance" type="2d" style="width: 220px; height: 120px;" ></canvas> </view> </view>3、wxss:.fragModel_hover{box-shadow: 0.2rem 0 0.3rem #8fd0e0, -0.2rem 0 0.3rem #58bfd1;} .fragrance_item{position: relative;margin-left: 15px;margin-right: 15px;} .fragPos{position: absolute;left: 50%; top: 50%;transform: translateX(-50%);text-align: center;} .fragPos .fragNum{color:#32CD32;} .fragPsoReset{position: absolute;right: 3px;top: 36px;text-align: center;} .fragPsoReset .fragReset{display:inline-block;padding:8px 13px;background-color: rgba(50,80,80.68);border-radius: 15px;transition: all .3s ease-in;font-size: 12px;} .fragPsoReset .fragReset_icon{width:22px;height:22px;} .fragRing{width: 220px;height:120px;margin: auto;}4、js:let perfumeNum = 1.5; Page({ data: { perfumePercent: 0, // 香水余量 }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { let that = this; // 香水余量圆环 const query = wx.createSelectorQuery() query.select('#perfumeBalance') .fields({ node: true, size: true }).exec((res) => { that.initRing(res); }) }, // b、香水余量 initRing(res) { let that = this; const canvas = res[0].node const ctx = canvas.getContext('2d'); const dpr = wx.getSystemInfoSync().pixelRatio // 设备像素比 canvas.width = res[0].width * dpr canvas.height = res[0].height * dpr ctx.scale(dpr, dpr); var circleR = 220 / 2; // 画布的一半,用来找中心点和半径 ctx.translate(0, 0); // 定义起始点 function draw() { ctx.clearRect(0, 0, canvas.width, canvas.height); // 取色圆环 ctx.beginPath(); ctx.strokeStyle = '#fff';//transparent ctx.lineWidth = 12; ctx.lineCap='round' // 设置圆环端点的形状 ctx.arc(circleR, circleR-10, circleR - 35, Math.PI, 2 * Math.PI, false); ctx.stroke(); ctx.closePath(); console.log("香水余量") // 进度_香水余量 ctx.beginPath(); // 起始一条路径,或重置当前路径 ctx.lineWidth = 6; // 线条宽度 ctx.lineCap='round' // 线条的结束端点样式 ctx.arc(circleR, circleR-10, circleR - 35, Math.PI,perfumeNum * Math.PI, false); ctx.strokeStyle = "#00CED1";//transparent ctx.stroke(); canvas.requestAnimationFrame(draw); } draw(); }, // 复位 resetTab(){ let that = this; perfumeNum = 2; // 香水余量为100% that.setData({ perfumePercent: 100, }) }, })
2022年04月23日
9 阅读
0 评论
0 点赞
2022-03-11
小程序 蓝牙连接(出现的问题和一些解决方法)
序:最近做小程序,要用到蓝牙模块的,不知道如何下手,没关系,看文档,看案例!看文档: 微信文档 看案例: 谷歌/百度/知乎等等,只要你觉得合适,都可以去尝试!一、小程序 BLE 开发 API 简介操作蓝牙适配器的共有 4 个:wx.openBluetoothAdapter 初始化蓝牙适配器 1 wx.closeBluetoothAdapter 关闭蓝牙模块 2 wx.getBluetoothAdapterState 获取本机蓝牙适配器状态 3 wx.onBluetoothAdapterStateChange 监听蓝牙适配器状态变化事件 4扫描和获取周围 BLE 设备的有4个(操作方式与普通蓝牙一样):wx.startBluetoothDevicesDiscovery 开始搜寻附近的蓝牙外围设备 5 wx.stopBluetoothDevicesDiscovery 停止搜寻附近的蓝牙外围设备 6 wx.getBluetoothDevices 获取所有已发现的蓝牙设备 7 wx.onBluetoothDeviceFound 监听寻找到新设备的事件 8连接BLE设备的2个:wx.createBLEConnection 连接低功耗蓝牙设备 9 wx.closeBLEConnection 断开与低功耗蓝牙设备的连接 10连接成功后,读写BLE对应特征对象的数据:wx.getConnectedBluetoothDevices 根据 uuid 获取处于已连接状态的设备 11 wx.getBLEDeviceServices 获取蓝牙设备所有 service(服务) 12 wx.getBLEDeviceCharacteristics 获取蓝牙设备所有 characteristic(特征值)13 wx.readBLECharacteristicValue 读取低功耗蓝牙设备的特征值的二进制数据值 14 wx.writeBLECharacteristicValue 向低功耗蓝牙设备特征值中写入二进制数据 15 wx.notifyBLECharacteristicValueChange 启用低功耗蓝牙设备特征值变化时的 notify 功能 16 wx.onBLECharacteristicValueChange 监听低功耗蓝牙设备的特征值变化 17 wx.onBLEConnectionStateChange 监听低功耗蓝牙连接的错误事件 18二、小程序蓝牙连接流程我的连接流程是这样的(代码我就不多贴了,只要你有思路、有想法,你就是黑马):初始化蓝牙设备之前,我做了一些的骚操作(不懂的查一下):1、打开定位/** 获取定位信息 */ getLocation: function () { let that = this; // 获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限 wx.getSetting({ success: function (res) { if(res.authSetting['scope.userLocation'] != undefined && res.authSetting['scope.userLocation'] != true){ wx.showModal({ title: '是否授权当前位置', content: '需要获取你的地理位置,请确认授权,否则无法获蓝牙', success: function(mres){ if(mres.confirm){ wx.openSetting({ success (authData) { if(authData.authSetting['scope.userLocation'] == true){ wx.showToast({ title: '授权成功', icon: "success", duration: 1000 }) }else{ wx.showToast({ title: '授权失败', icon: "error", duration: 1000 }) } } }) }else if(mres.cancel){ wx.showToast({ title: '授权失败', icon: "error", duration: 1000 }) } } }) }else{ // 当前位置 wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标 wx.getLocation({ type: 'wgs84', success: function (res) { console.log('打开地理位置') }, }) } }, }) },2、这个放到一个初始化方法里面,,校验一下微信的蓝牙权限是否打开:init(){ let that = this; // 可以通过 wx.getSetting 先查询一下用户是否授权了 "scope.bluetooth" 这个 scope wx.getSetting({ success(res) { // (1) 微信授权已关闭,弹窗打开 if (res.authSetting['scope.bluetooth'] != undefined && res.authSetting['scope.bluetooth'] == false) { wx.openSetting({ success (authData) { if(authData.authSetting['scope.bluetooth'] == true){ wx.showToast({ title: '授权成功', icon: "success", duration: 1000 }) that.openBluetoothAdapter(); // 打开蓝牙适配器 }else{ wx.showToast({ title: '授权失败', icon: "success", duration: 1000 }) } } }) } // (2) 'scope.bluetooth'属性不存在,需要授权 if(res.authSetting['scope.bluetooth'] == undefined){ wx.authorize({ scope: 'scope.bluetooth', success(res){ that.openBluetoothAdapter(); // 打开蓝牙适配器 } }) } // (3) 已经授权 if(res.authSetting['scope.bluetooth'] == true){ that.openBluetoothAdapter(); // 打开蓝牙适配器 } } }) }初始化蓝牙设备 1=》 (1_success)成功:开始搜索附近的蓝牙外围设备 5 , (1_fail)失败:获取蓝牙适配器状态 4;=》1_success:发现蓝牙设备 8 (对结果进行过滤,符合条件的设备进行连接) =》 连接到目标设备 9 ,连接成功,监听蓝牙低功耗连接状态的改变事件 18,关闭蓝牙搜索 6 =》 获取蓝牙低功耗设备所有服务 12 =》 获取某个服务下所有的特征值 13 (打印一下特征值有:notify,read,write特征的),监听蓝牙低功耗设备的特征值变化 17 =》 启用低功耗蓝牙设备特征值变化时的 notify 功能 16 ;=》1_fail:available 为true时,开始搜索附近的蓝牙外围设备 5,否则提示检查蓝牙是否打开你会发现,有好几个是一些流程中没用到的,但是,这是不可能发生的,存在必有其道理;(1)比如:你刷新时,你不可能再重新走一遍初始化蓝牙吧,那就要用到 获取蓝牙适配器状态 3 ,判断是 获取所有已发现的蓝牙设备 8 还是 开始搜索附近的蓝牙外围设备 5;(2)比如:要你断开主动断开蓝牙连接,断开与低功耗蓝牙设备的连接 10;(3)比如:短时间内,频繁退出或多次扫描 重新进入已连接蓝牙的小程序,在 onLoad 要用的 根据 uuid 获取处于已连接状态的设备 11(连接后,缓存 services 连接的 uuid 值),不然你已连接了设备,还一直搜不到;(4)比如:关闭蓝牙模块 2,获取所有已发现的蓝牙设备 7,读取低功耗蓝牙设备的特征值的二进制数据值 14,向低功耗蓝牙设备特征值中写入二进制数据 15 ,这个几个不用我多说了吧。三、总结:iOS 的坑是比较少一些的,Android 机的确实有很多不完善的地方,毕竟是百花齐放的嘛
2022年03月11日
311 阅读
0 评论
0 点赞
2022-02-06
春节假期
春节假期这个春节假期平平淡淡,一如既往的蜗居在家,大门没出超过十次。1月24日归家的一天,下午4点多的车票,深圳北到梧州南,六点多到梧州南站,出站差不多二十多分钟,本想去打的的,最后恍恍惚惚去买了班车(也就是你们说的巴士)票,七点多开车,路上堵了十分钟左右,一个多钟的路程,八点多到岑溪,又等了二十分钟左右我哥来接我,回村到家已经九点多了;期间,梧州到家这段家人虽然唠叨责备,但是也是关心问候,当时的心情不如现在罢了,其实都懂得,也明白其方法用得不对,但终究有些无能为力,十几年的生活习惯,哪能凭我几天的相聚说服且改变,只能默而不语。转了两千给老哥,让他过年能减轻一下自己的用度。1月25日归家的一天,早上到村委登记,然后到镇里测核酸,这队长死了,百来个人,排了快两个多钟才测到我;期间快到十一点时,眼看测核酸的人越来越多,然后工作人员点够前面排队的人数,让后面的人回去多了,这就是小镇,效率慢且设施落后,登记信息是两个人手敲的,速度能快才奇呢。1月25日 1月26日 1月27日这几天不是和外甥女玩就是和外甥女玩,小孩单纯又可爱,但也开始有了一些不好习惯展现了出来,几个小孩玩在一块,开始有推人的习惯了,不知是哪个开始的,大的那个用的最多,小的也跟着学,小孩子不知道是非对错,但大人还是要教的,如果只是唬叫几声的喊骂,只是治标不治本,看着二姐的散养养娃式,我也无奈,这习惯不是一蹴而就的,就算我打了也不管事,没有在止在开头,终究是个陋习,陋习一多,是为坏习惯,唉!这个就不深究了,意义不大。1月28日今天开始 气温骤降,不是降温,是急冻,伴随小雨纷纷,寒风入骨,令人不适,防寒衣物幸好带了一些,不然就芭比Q了,有一个小热风机吹吹脚,不然就上楼躺床盖被子,看小程蓝牙代码。1月29日 1月30日29号,六姨新居进住碧桂园,安静宜居之地,卧龙之所,屋满春风春满屋,门盈喜气喜盈门,宴请了亲朋好友,摆了三桌大菜;给外公带回一个新手机,他说旧手机的天气预报收不到了;这两天,我变得更懒,早上刷牙的水是冰的,人连大门口都少出,一天两餐,早午餐一块吃。1月31日 2月1日除夕,手上的现金不是很多,连五百都没有,大姐让我帮给一千家里,只能匆匆到药材六那里换取了八百现金,补够一千给老爸,我自己只能微信转两千给他(老爸去年还用着发红包,现在老爸一直抱怨不会使用微信付款,教过很多次了,也不知道真假),想要转变一个人很难,转变一个比较固执的人更难。大年初一,早上给外甥女发红包,也收到老妈给的红包,下着春雨贴红纸,老哥烧的鞭炮,在村里还有点年味,在城里只能在街上体会一下了。2月2日 2月3日过年期间顿顿吃肉,肉菜吃不完,青菜也吃不完,农村是这样,青菜不会缺,一如前几天,天气依然寒冷,冻得我瑟瑟发抖,3号老妈包粽子,我烧火兼烘暖,烧了大半天火,粽子出锅了。2月4日今天本来是进城去外公家的,从中午拖到下午,然后到晚上,老哥本说不开车带我进城的,让我坐班车进城的,下午他忙忙碌碌去买狗杀,跑好几个钟后才买到,最后杀好分好煮饭杜快晚上,最后洗完澡吃完饭,到外公家已经八点左右了,外公还没睡,和外公再深刻讲解了一下新手机的使用,老人易忘。2月5日一大早上,见外婆起的比我还早,七姨还没起,问了一下,外婆说要到九点多到十点吧她们才会起来;我吃过早餐后,出去逛一逛,在一个小店吃一份白米磁,去车站联系一下上梧州的顺风车,在回来的路上买点吃的东西,九点五十出门,十点上车出发,路上兜兜转转加上塞车,快十一四十多到梧州南站,十二点多进站,下午一点二十一分的动车,快四点到罗湖深圳站,回到宿舍也快五点了,一切顺利!新的征程将要开始...
2022年02月06日
25 阅读
0 评论
0 点赞
2022-01-03
元旦假期
元旦,假期三天(包括周六日)。第一天元旦,昨晚跨年晚睡,早上慢悠悠起床,十一点左右出门,本想着今天独自去甘坑客家小镇逛一逛的,开始的路上打开软件地图,突然想去爬山了,然后看看地图,去了塘朗山,出了桃源村地铁站,在附近买了几个橘子、一瓶水和一瓶维C饮料,从龙珠门进入,抄近道上到山顶,... -> 陶然小憩 -> 相思经 -> 深云广场,下午回来自己做顿好吃的,然后过个节。第二天修养,哪也不去,除了出一趟门吃个饭。第三天中午出门,快两点才到甘坑客家小镇,扫码预约亮绿码,好像预约了个寂寞,保安只看了一下绿马,其他的都没查,在里面逛了逛,在返回的过程中闻到牛奶和鸡蛋的香味,找到一家店,在那买了两个鸡蛋烤饼,到一家奶茶店买了一杯烧仙草,并在那吃完了才走,最后撑着肚子回去了。
2022年01月03日
20 阅读
0 评论
0 点赞
1
2
3
4
...
7