当前位置: 首页 > news >正文

thinkphp手机网站开发东莞市人才服务中心官网

thinkphp手机网站开发,东莞市人才服务中心官网,北京seo全网营销,玩游戏的网页文章目录 引入实现效果思路声明通用的定位对象主进程模块渲染进程测试效果 引入 demo项目地址 窗口工具类系列文章#xff1a; 封装窗口工具类【1】雏形 封装窗口工具类【2】窗口组#xff0c;维护窗口关系 封装窗口工具类【3】控制窗口定向移动 很多时候#xff0c;我们想… 文章目录 引入实现效果思路声明通用的定位对象主进程模块渲染进程测试效果 引入 demo项目地址 窗口工具类系列文章 封装窗口工具类【1】雏形 封装窗口工具类【2】窗口组维护窗口关系 封装窗口工具类【3】控制窗口定向移动 很多时候我们想直接让某个窗口移动到边角例如居中、左上、右下等位置electron没有提供直接的api来实现这种操作我们不妨基于electron的位置移动api进行封装实现窗口灵活的定向移动 实现效果 输入key可以操作指定窗口不输入则操作本窗口可以直接根据position参数快速控制窗口定向移动输入偏移量微调窗口 思路 electron位置相关api electron获取某个窗口所在屏幕的显示对象 首先electron的窗口位置也是有(x,y)坐标对应横轴和纵轴我们可以使用窗口移动api设置x和y左上角就是[0,0]然后我们可以通过screen.getDisplayMatching(rect)来获取窗口所在屏幕的展示对象从中可获取屏幕的长宽和xy等信息接着咱们直接用这两个数据做差即可 假如屏幕用s表示窗口用w表示窗口居中计算如下 x s.x (s.width - w.width) / 2 y s.y (s.height - w.height) / 2声明通用的定位对象 types\global.d.ts /** 一些全局的对象补充声明 */ export {}; declare global {....../*** 窗口定位相关参数 *//** 自定义定位类型 */type MyPosition | center // 居中| bottom-left // 左下| bottom-right // 右下| top-right // 右上| top-left; // 左上/*** 注意这里指的屏幕是当前窗口所在的屏幕【存在多个屏幕的情况下】*/interface IWindowPosition {windowKey?:string; // 窗口的key不传就是修改本窗口的位置x?: number; // 屏幕左上角开始x轴位置y?: number; // 屏幕左上角开始y轴位置relativeWindowId?: number; // 相对于某个窗口的位置/默认相对于屏幕position?: MyPosition; // 相对于屏幕或窗口的位置offsetX?: number; // X轴偏移量offsetY?: number; // Y轴偏移量} } 主进程模块 1.我们在窗口工具类中补充一个修改窗口位置的方法 electron\main\windowUtils.ts这里还补充了一个横纵轴的偏移量offsetXoffsetY用于需要微调定位的情况这里我们把window作为参数传入而不是在方法内部直接通过key去获取是为了方便后续其他在工具类中的位置修改操作方便调用 import {screen} from electron;export class WindowUtils {... /*** 修改窗口的位置* param window 窗口对象* param windowPosition 位置参数对象*/changeWindowPostion(window: BrowserWindow, windowPosition: IWindowPosition) {// xy轴值let x windowPosition.x;let y windowPosition.y;if (x ! null y ! null) {// 偏移量const offsetX windowPosition.offsetX || 0;const offsetY windowPosition.offsetY || 0;x windowPosition.x offsetX;y windowPosition.y offsetY;// 如果是相对于某个窗口的话加上相对窗口的x、y坐标if (windowPosition.relativeWindowId) {const relativeWin BrowserWindow.fromId(windowPosition.relativeWindowId);if (relativeWin) {x relativeWin.getPosition()[0];y relativeWin.getPosition()[1];}}window.setPosition(x, y);}// 如果有定位if (windowPosition.position) {// 偏移量const offsetX windowPosition.offsetX || 0;const offsetY windowPosition.offsetY || 0;const winBounds window.getBounds();let relativeBounds screen.getDisplayMatching(winBounds).bounds;if (windowPosition.relativeWindowId) {const relativeWin BrowserWindow.fromId(windowPosition.relativeWindowId);if (relativeWin) {relativeBounds relativeWin.getBounds();}}// 计算坐标switch (windowPosition.position) {case center:window.setPosition(relativeBounds.x (relativeBounds.width - winBounds.width) / 2 offsetX,relativeBounds.y (relativeBounds.height - winBounds.height) / 2 offsetY);break;case bottom-left:window.setPosition(relativeBounds.x offsetX,relativeBounds.y relativeBounds.height -winBounds.height offsetY);break;case bottom-right:window.setPosition(relativeBounds.x relativeBounds.width - winBounds.width offsetX,relativeBounds.y relativeBounds.height -winBounds.height offsetY);break;case top-left:window.setPosition(relativeBounds.x offsetX,relativeBounds.y offsetY);break;case top-right:window.setPosition(relativeBounds.x relativeBounds.width - winBounds.width offsetX,relativeBounds.y offsetY);break;}}} }2.接着我们补充两个获取窗口的方法 electron\main\windowUtils.ts export class WindowUtils {.../*** 通过窗口事件获取发送者的窗口* param event ipc发送窗口事件*/getWindowByEvent(event: Electron.IpcMainInvokeEvent): BrowserWindow {const webContentsId event.sender.id;for (const currentWin of BrowserWindow.getAllWindows()) {if (currentWin.webContents.id webContentsId) {return currentWin;}}return null;}/*** 通过传入的key获取指定的窗口* param key 窗口唯一key*/getWindowByKey(key: string): BrowserWindow {return BrowserWindow.fromId(this.group.get(key).windowId);} }3.接着我们在listen方法中补充handle监听来处理渲染进程的事件 electron\main\windowUtils.ts export class WindowUtils {...listen() {...// 窗口位置修改监听ipcMain.handle(CustomChannel.window_position_change,(_, windowPosition: IWindowPosition) {// 假如传了窗口的key则获取对应窗口假如没传则用发送事件的窗口const windowKey windowPosition.windowKey;const cureentWin windowKey windowKey.length 0? this.getWindowByKey(windowKey): this.getWindowByEvent(_);this.changeWindowPostion(cureentWin, windowPosition);});} }渲染进程 1.工具类中补充窗口位置修改方法调用 src\utils\electronUtils.ts /*** 修改当前窗口的位置* param windowPosition 窗口位置修改参数*/ export function changeWindowPosition(windowPosition: IWindowPosition) {ipcRenderer.invoke(CustomChannel.window_position_change, windowPosition); }2.写一个功能展示的demo src\components\demo\WindowPositionDemo.vue templatediv classmockDemoGoBack/GoBackulliel-input v-modelwindowKey/el-input/liliel-form inlineel-form-item label距离左边距离el-input v-modelx/el-input/el-form-itemel-form-item label距离上边距离el-input v-modely/el-input/el-form-itemel-form-item label距离左边偏移量el-input v-modeloffsetX/el-input/el-form-itemel-form-item label距离上边偏移量el-input v-modeloffsetY/el-input/el-form-itemel-form-itemel-buttonclickchangeWindowPosition({x: Number.parseFloat(x),y: Number.parseFloat(y),offsetX: Number.parseFloat(offsetX),offsetY: Number.parseFloat(offsetY),windowKey,})移动位置/el-button/el-form-item/el-form/liliel-buttonclickchangeWindowPosition({position: top-left,offsetX: Number.parseFloat(offsetX),offsetY: Number.parseFloat(offsetY),windowKey,})左上/el-buttonel-buttonclickchangeWindowPosition({position: top-right,offsetX: Number.parseFloat(offsetX),offsetY: Number.parseFloat(offsetY),windowKey,})右上/el-button/liliel-buttonclickchangeWindowPosition({position: center,offsetX: Number.parseFloat(offsetX),offsetY: Number.parseFloat(offsetY),windowKey,})居中/el-button/liliel-buttonclickchangeWindowPosition({position: bottom-left,offsetX: Number.parseFloat(offsetX),offsetY: Number.parseFloat(offsetY),windowKey,})左下/el-buttonel-buttonclickchangeWindowPosition({position: bottom-right,offsetX: Number.parseFloat(offsetX),offsetY: Number.parseFloat(offsetY),windowKey,})右下/el-button/li/ul/div /templatescript setup langts import { changeWindowPosition } from /utils/electronUtils; import { ref } from vue; const x ref(0); const y ref(0); const offsetX ref(0); const offsetY ref(0); const windowKey ref(); /scriptstyle scoped ul {list-style: none; } /style 测试效果 可以随心所欲的控制任何窗口到处定向移动了是不是很酷 _三└(┐卍 ˘ω˘)卍 输入key可以操作指定窗口不输入则操作本窗口可以直接根据position参数快速控制窗口定向移动输入偏移量微调窗口
http://www.hkea.cn/news/14553899/

相关文章:

  • 京山网站开发深圳建筑工地招聘信息
  • php做商城网站建设设计灵感的网站
  • 网站怎么谈设计大连做网站哪家好一点
  • 中型网站流量家具网站素材
  • 同城做哪个网站推广效果好公司网站制作网络公司
  • 建设网站 (公司)ae做的动效怎么放在网站上
  • 门户网站建设公司价位中国设计之窗官方网站
  • 广州企业网站制作哪家好网站开发维护公司
  • 电商网站开发用什么语言表达wordpress 宽屏主题
  • 电子商务网站建设课程标准宽城区网站建设
  • 网站后台上传文章格式创业项目网
  • 深圳建设局网站怎么做宣传推广
  • 智能网站开发在vs2010里怎么做网站
  • 东莞债优化泰安seo外包公司
  • 淘宝联盟网站模板投诉做单骗子网站
  • 做拼货商城网站企业邮箱入口登录
  • 哈尔滨企业网站建设南昌百度快速排名优化
  • 网站建设整个流程官方网站建设推广
  • 广告网站怎么设计制作网站如何做视频链接地址
  • 一个域名可以绑定两个网站吗没签合同网站做不好
  • 十堰微网站建设wordpress 4.9.7 中文
  • 用动易建设网站教程江西省工程造价信息网官网
  • 国外js网站临淄专业网站优化哪家好
  • 做网站 seoh5免费制作平台易企秀网页版
  • 上海网站建设外贸万网商标注册
  • 仿一个展示型网站多少钱工商网站如何做企业增资
  • 390元做微信小程序 公众号 网站海口制作网站企业
  • 开源门户网站建设方案企业邮箱域名怎么写
  • 那个网站做的好平面电商设计是什么
  • 广西建设厅招投标中心网站wordpress 小说 采集