electron vue 透明桌面事件穿透

electron 透明桌面事件穿透

网上有很多方式都不怎么理想,这里有个新方式

我这里用到了remote  ,引用的包是  @electron/remote

在主流程main.js下引用

import { screen } from 'electron'

ipcMain.handle('get-screen-point', () => screen.getCursorScreenPoint());

 

复制代码
在渲染流程中,这里是vue

import { ipcRenderer } from 'electron'
import { BrowserWindow } from '@electron/remote'
const win = BrowserWindow.getFocusedWindow()

let t = null

  mounted () {
    window.addEventListener('mousemove', event => {
      this.handleMouseMov(event, this)
    });
  },
  methods: {
    getScreenPoint: () => {
      return ipcRenderer.invoke('get-screen-point')
    },

    handleMouseMov: (e, _this) => {
      console.log(e, document)
      if (e.target === document.documentElement) {
        win.setIgnoreMouseEvents(true);

        if (t) clearInterval(t);
        t = setInterval(async () => {
          _this.getScreenPoint().then(point => {
            const elem = document.elementFromPoint(
              Math.floor(point.x),
              Math.floor(point.y)
            );

            if (elem !== document.documentElement) {
              win.setIgnoreMouseEvents(false);
              clearInterval(t);
            }
          })
        }, 150);
      }
      else {
        win.setIgnoreMouseEvents(false);
      }
    }
  },
复制代码

 

复制代码
在样式中

body,html{
  pointer-events: none
}

// 不穿透层
#noPo{
  pointer-events: auto;
}
复制代码

 

 


 

posted @   星涑  阅读(362)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示