J'ai essayé de déplacer une fenêtre sans cadre sur false mais maintenant je veux déplacer toute la fenêtre simplement en faisant glisser un élément (la barre de titre), J'ai essayé -webkit-app-region: drag;
mais cela ne semble pas fonctionner, j'ai aussi essayé https://www.npmjs.com/package/electron-drag mais ça ne marche pas non plus.
Étant donné que vos fenêtres sont sans cadre, vous pouvez utiliser la propriété -webkit-app-region
qui est valide même si votre IDE dit que ce n'est pas le cas. Vous devriez juste interdire la sélection de texte et faire glisser les boutons à l'intérieur de votre barre de titre trop par souci d'UX.
.titlebar {
-webkit-user-select: none;
-webkit-app-region: drag;
}
.titlebar-button {
-webkit-app-region: no-drag;
}
La documentation de l'API le mentionne également https://github.com/electron/electron/blob/master/docs/api/frameless-window.md#draggable-region
Créez d'abord votre fenêtre d'application avec l'option frame
définie sur false
sur votre fichier main.js:
mainWindow = new BrowserWindow({
...
frame: false
})
Ensuite, dans votre fichier renderer.js, créez un élément HTML (Ex.) Avec le -webkit-app-region
propriété définie sur drag
.
var windowTopBar = document.createElement('div')
windowTopBar.style.width = "100%"
windowTopBar.style.height = "32px"
windowTopBar.style.backgroundColor = "#000"
windowTopBar.style.position = "absolute"
windowTopBar.style.top = windowTopBar.style.left = 0
windowTopBar.style.webkitAppRegion = "drag"
document.body.appendChild(windowTopBar)
J'essaie d'implémenter cela dans une application React Electron. J'ai essayé d'utiliser les propriétés CSS comme indiqué ci-dessus, mais cela ne fonctionne pas encore. L'autre solution avec la fenêtre du navigateur ne fonctionne pas fonctionne tout à fait bien car mon application est en React avec l'application enveloppée dans un Context.Provider. Voici le code que j'ai:
Dans app.tsx
<ApplicationContext.Provider value={{
...this.state,
canvas: this.canvas,
setTheme: this.setTheme,
setFontSize: this.setFontSize,
setTabSize: this.setTabSize,
setShowLineNumbers: this.setShowLineNumbers,
}}
>
<div id="app" className={appTheme}>
<header className="title-bar">
{/* more code */}
</header>
</div>
</ApplicationContext.Provider>
Et cela dans App.scss
.title-bar {
-webkit-user-select: none;
-webkit-app-region: drag;
}
Quelqu'un sait-il s'il existe une meilleure stratégie pour résoudre ce problème dans une React Electron app?