Offline.js:自动提示在线/离线状态

Offline.js是一款轻量级JavaScript库,仅3KB大小,用于监测用户的在线/离线状态并提供简洁的通知界面。它支持多种通知主题和样式,可以轻松集成到项目中。本文将详细介绍其特性及使用方法。

https://blog.youkuaiyun.com/zx711166/article/details/78772554

Offline.js主要特点有:

体积小,仅有3kb 
UI简洁,并提供多套通知主题和样式 
可单独作为插件使用 
时刻监控ajax请求,监测用户在线/离线状态

项目官网与演示地址:http://github.hubspot.com/offline/docs/welcome/ 
Github代码托管地址:https://github.com/hubspot/offline 
BootCDN资源:http://www.bootcdn.cn/offline-js/

1、下载

这里写图片描述

2、导入文件包至项目中

这里写图片描述

3、在需要的界面上或者全局加载资源的文件中引入

这里写图片描述

4、调整样式中的英文

这里写图片描述
注: 图中@charset “UTF-8”的设置是解决css中中文乱码问题

温湿度数据(temp004)需要包含LED状态例如#80#10#off,并使硬件设备LED反应,同时以上已经实现的功能代码得存在;// 获取应用实例 const app = getApp() import mqtt from '../../utils/js/mqtt.min.js'; Page({ data: { uid: "1eacbabea77cd2fce337e15e9028d301", ledtopic: "swi006", dhttopic: "temp004", device_status: "离线", ledOnOff: "关闭", checked: false, wendu: "", shidu: "", ledicon: "/utils/img/lightoff.png", client: null, // 新增状态标记防止循环更新 isUpdatingFromDevice: false }, mqttConnect() { var that = this var options = { keepalive: 60, clean: true, protocolVersion: 4, clientId: this.data.uid } this.data.client = mqtt.connect('wxs://bemfa.com:9504/wss', options) // 连接成功回调 this.data.client.on('connect', function () { console.log('MQTT连接成功') that.setData({ device_status: "在线" }) // 订阅LED状态主题和温湿度主题 that.data.client.subscribe([that.data.ledtopic, that.data.dhttopic], function (err) { if (err) console.log("订阅失败:", err) else console.log("成功订阅主题") }) }) // 消息处理 that.data.client.on('message', function (topic, message) { const msg = message.toString() console.log(`收到主题[${topic}]消息: ${msg}`) // 处理LED状态更新 if (topic === that.data.ledtopic) { that.handleLedState(msg) } // 处理温湿度数据 if (topic === that.data.dhttopic) { that.handleSensorData(msg) } }) // 断线重连 this.data.client.on("reconnect", function () { console.log("MQTT重新连接中...") that.setData({ device_status: "重连中" }) }) // 错误处理 this.data.client.on('error', (err) => { console.error('MQTT错误:', err) that.setData({ device_status: "连接错误" }) }) }, // 处理LED状态更新 handleLedState(msg) { if (this.data.isUpdatingFromDevice) return this.setData({ isUpdatingFromDevice: true, checked: msg === "on", ledOnOff: msg === "on" ? "打开" : "关闭", ledicon: msg === "on" ? "/utils/img/lighton.png" : "/utils/img/lightoff.png" }, () => { setTimeout(() => this.setData({ isUpdatingFromDevice: false }), 500) }) }, // 处理传感器数据 handleSensorData(msg) { if (msg.indexOf("#") === -1) return const parts = msg.split("#").filter(Boolean) if (parts.length < 2) return this.setData({ wendu: parts[0], shidu: parts[1] }) }, onLoad() { this.mqttConnect() this.getDeviceStatus() console.log("小程序启动完成") }, onUnload() { if (this.data.client) { this.data.client.end() console.log("MQTT连接已关闭") } }, // LED控制切换 onChange({ detail }) { this.toggleLedState(detail) }, // LED图标点击 onChange2() { this.toggleLedState(!this.data.checked) }, // LED状态切换核心方法 toggleLedState(newState) { if (!this.data.client || this.data.device_status !== "在线") { wx.showToast({ title: '设备离线', icon: 'error' }) return } const command = newState ? "on" : "off" this.data.client.publish(this.data.ledtopic, command) this.setData({ checked: newState, ledOnOff: newState ? "打开" : "关闭", ledicon: newState ? "/utils/img/lighton.png" : "/utils/img/lightoff.png" }) console.log(`发送LED控制命令: ${command}`) }, // 获取设备状态 getDeviceStatus() { wx.request({ url: 'https://api.bemfa.com/mqtt/status/', data: { uid: this.data.uid, topic: this.data.ledtopic }, header: { 'content-type': "application/x-www-form-urlencoded" }, success: (res) => { this.setData({ device_status: res.data.status === "online" ? "在线" : "离线" }) }, fail: (err) => { console.error("状态获取失败:", err) } }) } })给出完整代码,不要把不用修改的代码省略
06-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值