145 lines
5.5 KiB
Plaintext
145 lines
5.5 KiB
Plaintext
【进程通讯:】
|
||
|
||
渲染进程:ipcrenderer从渲染进程到主进程的异步通信
|
||
先调用 在使用方法 const { ipcrenderer } = require('electron')
|
||
|
||
渲染进程:
|
||
发送消息
|
||
ipcrenderer.send(“A”,参数)
|
||
ipcrenderer.on
|
||
|
||
主进程:
|
||
ipcmain.send
|
||
监听消息 回调
|
||
ipcmain.on("A",(event,参数) => {}) 两者名称A 一定要一样
|
||
|
||
|
||
|
||
【ws 和 socket.io 发送和监听的区别】
|
||
【ws】
|
||
ws.send(发送)
|
||
ws.onmessage = function (e) {监听}//缺点:消息分为不同消息 但所有返回结果都统一放在onmessage里面处理。
|
||
|
||
【socket.io】emit————on:由node.js提供 (websocket 心跳 + 断线重连)
|
||
socket.emit(发送 名字 + 值)//事件触发 提交一次
|
||
socket.on(监听 名字)//事件监听 就可以监听无数次
|
||
socket.join(userId) 添加客户端到room房间内,并且执行可选择的回调函数。
|
||
socket.to().emit()(除开自己)向房间里所有成员推送消息
|
||
io.in().emit()(除开自己)通知房间里所有成员
|
||
|
||
【position】
|
||
.setPosition(x,y)设定窗口位置
|
||
|
||
|
||
|
||
|
||
登良页面逻辑:登陆页面的数据要进行保存{对象保存以群为单位和聊天记录保存},如果是数组的话,需要下标,并且还要遍历。
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
【其他零散知识点合集:】
|
||
窗口大小是否可调——————————resizable: false(默认true)
|
||
保存数据到本地——————————localStorage.setItem(JSON.stringify(转字符串))
|
||
从本地取出数据——————————localStorage.getItem(JSON.parse(转对象))
|
||
取消默认菜单——————————Menu.setApplicationMenu(null)
|
||
使用对话框—————————— data-toggle属性声明该按钮或链接点击后会显示或隐藏的对话框;
|
||
data-target属性指明静态对话框的ID属性。如果使用<a>触发对话框,可以直接将静态模块框的ID写在href属性内,data-target属性则可以忽略。
|
||
|
||
检测一个属性是否是对象的自有属性——————————JS hasOwnProperty()
|
||
|
||
|
||
【css知识点集合:】
|
||
弹性盒子竖向排列——————————display: flex;
|
||
flex-direction: column;
|
||
justify-content:——————flex-end;从行尾位置开始排列
|
||
order: 2;设置弹性盒对象元素的顺序:值越小越靠前
|
||
|
||
鼠标指针样式(小手)——————cursor: pointer;
|
||
|
||
强制性换行(不用保持单词完整性)——————word-break: break-all;
|
||
强制性换行(保持单词完整性)——————word-wrap:break-word;
|
||
默认自动换行(但不包括没有空格的字符或字母或数字)——————white-space:normal;
|
||
不换行——————white-space:nowrap;
|
||
|
||
最大宽度——————max-width: calc(100vw - 274px);
|
||
指定元素内容是否可编辑——————contenteditable;
|
||
设置元素周围的轮廓————————outline: none;
|
||
设置一个元素的垂直对齐方式————————vertical-align:属性值有很多;
|
||
阻止默认事件:e.preventDefault();
|
||
|
||
|
||
【jq方法合集:】
|
||
jQuery里面不需要做循环,直接.方法即可
|
||
|
||
追加到目标内容————————.append()
|
||
设置或返回被选元素的属性值————————.attr(属性名称,属性值) 单个就是修改一个值,传对象同时修改多个值
|
||
获取(设置)文本框中的值————————.val()
|
||
input事件绑定————————.bind(绑定) off(清除)
|
||
键盘事件————————keydown - 键按下的过程
|
||
keypress - 键被按下
|
||
keyup - 键被松开
|
||
event.which 属性返回指定事件上哪个键盘键或鼠标按钮被按下(keyCode)
|
||
返回被选元素的所有同级元素————————.siblings() 即除开本身之外的其他同级兄弟姐妹
|
||
返回带有被选元素的指定索引号的元素————————.eq() 即返回指定元素的下标
|
||
类名的添加和删除————————.addClass("active")
|
||
.removeClass()
|
||
添加文本————————.text($(this).text()) 解释:$()转为jq获取对象
|
||
鼠标指针悬停————————.hover() 要运行两个方法,并且方法触发 mouseenter 和 mouseleave 事件
|
||
生成被选元素副本————————.clone() 因为jq追加内容,会在原件里面删除被追加内容
|
||
|
||
|
||
|
||
html里面 无法使用node.js的解决办法:
|
||
|
||
————在主进程打开以下配置————
|
||
|
||
//网页功能设置
|
||
webPreferences: {
|
||
//是否启用node.js
|
||
nodeIntegration: true,
|
||
|
||
//是否在web工作器中启用node集成
|
||
nodeIntegrationInWorker: true,
|
||
|
||
//是否独立js环境中运行electron api和指定的preload脚本
|
||
contextIsolation: false
|
||
}
|
||
|
||
|
||
————————node.js和jq冲突解决方案:
|
||
|
||
将此行代码放在jq下放——————
|
||
<script>if (typeof module === 'object') {window.jQuery = window.$ = module.exports;};</script>
|
||
|
||
|
||
解决1:动态计算最大宽度(推拽对话框 边距动态计算 on resiae事件)
|
||
解决2:气泡 增加一个background 赋值 添加到content style样式上去 div宽高100%继承父容器否则占不满
|
||
1h33解决3:震动 前端按钮点击 web发送给服务器 服务器转发给其他人,渲染进程收到消息通知各个主进程,主进程操控窗口抖动
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|