Electron-桌面 App-螢幕遮罩(Screen mask) - 3

更新 發佈閱讀 10 分鐘

前言
公司最近配的一台螢幕,沒辦法調整亮度,亮得要命,眼睛要瞎掉了
所以只好自立自強搞一個螢幕遮罩

上一章節回顧
第一章:顯示 Electron 視窗,可調整透明度
第二章:參數維護移植到 main/js

本章節內容
增加調整顏色功能


第一步: overlaySettings 維護 color

  1. 開啟 src/main.js
  2. overlaySettings,增加設定 color
// src/main.js
const { app, BrowserWindow, screen } = require('electron');
const path = require('path');

// 維護 opacity
let overlaySettings = {
opacity: 0.5, // 調回 0.5
color: "0,0,0" // 👈 這裡設定
}

function createWindow() {
...
  1. index.html 增加 顏色輸入控制
<!DOCTYPE html>
<html lang="en">
<head>
...
</head>

<body class="h-screen w-screen overflow-hidden">
...
<label class="block">
透明度
<input
type="range"
id="opacityInput"
min="0"
max="1"
step="0.1"
value="0.5"
class="w-full"
/>
</label>
<!-- 👇 增加顏色輸入控制 -->
<label class="block">
顏色
<input type="color" id="colorInput" class="w-full" />
</label>
</div>

<script>
...
</script>
</body>
</html>

執行 npm start
✅ 確認右上面板出現 顏色輸入,可以設定顏色但沒啥作用


第二步:增加 顏色輸入事件綁定

  1. 開啟 src/index.html
  2. 編輯 <script> :
    // 1. 取得 colorInput 元件
    const colorInput = document.getElementById('colorInput')

    // 2. 綁定 colorInput 輸入事件
    colorInput.oninput = handleUpdate

    // 3. handleUpdate 擴充 color 設定 (需要先轉換 color #HHHHHH 為 (r,g,b))
    function handleUpdate() {
    const hex = colorInput.value
    const r = parseInt(hex.slice(1, 3), 16)
    const g = parseInt(hex.slice(3, 5), 16)
    const b = parseInt(hex.slice(5, 7), 16)
    const rgbString = `${r}, ${g}, ${b}`
    const newSettings = {
    opacity: opacityInput.value,
    color: rgbString,
    }
    applyStyle(newSettings)
    ipcRenderer.send('upload-settings', newSettings)
    }

    // 4. applyStyle 增加 --overlay-color 最新color值綁定
    function applyStyle({ opacity, color }) {
    document.body.style.setProperty('--overlay-opacity', opacity)
    document.body.style.setProperty('--overlay-color', color) // 👈 擴充
    }

    // 5. 'init-settings' 擴充 color
    ipcRenderer.on('init-settings', (event, settings) => {
    const [r, g, b] = settings.color
    .split(',')
    .map((num) => parseInt(num.trim()))
    const toHex = (n) => n.toString(16).padStart(2, '0')
    const hexResult = `#${toHex(r)}${toHex(g)}${toHex(b)}`

    opacityInput.value = settings.opacity
    colorInput.value = hexResult
    applyStyle(settings)
    })

完整<script> :

<script>
const { ipcRenderer } = require('electron')
const overlay = document.getElementById('overlay')
const opacityInput = document.getElementById('opacityInput')
const colorInput = document.getElementById('colorInput')

// 接收來自 main.js 的初始設定
ipcRenderer.on('init-settings', (event, settings) => {
const [r, g, b] = settings.color
.split(',')
.map((num) => parseInt(num.trim()))
const toHex = (n) => n.toString(16).padStart(2, '0')
const hexResult = `#${toHex(r)}${toHex(g)}${toHex(b)}`

opacityInput.value = settings.opacity
colorInput.value = hexResult
applyStyle(settings)
})

function applyStyle({ opacity, color }) {
document.body.style.setProperty('--overlay-opacity', opacity)
document.body.style.setProperty('--overlay-color', color)
}

function handleUpdate() {
const hex = colorInput.value
const r = parseInt(hex.slice(1, 3), 16)
const g = parseInt(hex.slice(3, 5), 16)
const b = parseInt(hex.slice(5, 7), 16)
const rgbString = `${r}, ${g}, ${b}`
const newSettings = {
opacity: opacityInput.value,
color: rgbString,
}
applyStyle(newSettings)
ipcRenderer.send('upload-settings', newSettings)
}

opacityInput.oninput = handleUpdate
colorInput.oninput = handleUpdate
</script>

執行 npm start
✅ 確認右上面板出現 顏色輸入,可以設定顏色


留言
avatar-img
李昀瑾的沙龍
0會員
37內容數
李昀瑾的沙龍的其他內容
2026/04/02
前言 公司最近配的一台螢幕,沒辦法調整亮度,亮得要命,眼睛要瞎掉了所以只好自立自強搞一個螢幕遮罩 上一章節回顧 第一章:顯示 Electron 視窗,可調整透明度 本章節內容 參數維護移植到 main/js
2026/04/02
前言 公司最近配的一台螢幕,沒辦法調整亮度,亮得要命,眼睛要瞎掉了所以只好自立自強搞一個螢幕遮罩 上一章節回顧 第一章:顯示 Electron 視窗,可調整透明度 本章節內容 參數維護移植到 main/js
2026/03/26
前言 公司最近配的一台螢幕,沒辦法調整亮度,亮得要命,眼睛要瞎掉了 所以只好自立自強搞一個螢幕遮罩 本章節內容 顯示 Electron 視窗,可調整透明度
Thumbnail
2026/03/26
前言 公司最近配的一台螢幕,沒辦法調整亮度,亮得要命,眼睛要瞎掉了 所以只好自立自強搞一個螢幕遮罩 本章節內容 顯示 Electron 視窗,可調整透明度
Thumbnail
2026/03/19
(進階) 搭配 Nano Stores 完成「過濾器按鈕」 index.astro 的 ALL 按鈕,改為 FilterButton.tsx 套用先前建立好的 techStore.js 1. 建立 FilterButton 元件 新增 src\components\FilterButton
2026/03/19
(進階) 搭配 Nano Stores 完成「過濾器按鈕」 index.astro 的 ALL 按鈕,改為 FilterButton.tsx 套用先前建立好的 techStore.js 1. 建立 FilterButton 元件 新增 src\components\FilterButton
看更多
你可能也想看
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
這份是我在使用Lovable做網站時,邊做邊紀錄的完整攻略,分享給需要的人。 給開發者/接案者的前言: Lovable 是一個強大的 AI 全端開發工具,要用它來賺錢,您必須清楚它的邊界在哪裡。這份指南將協助您完全掌控這個工具,從而自信地向客戶報價。 第一章:深度認識 Lovable 1.1
Thumbnail
這份是我在使用Lovable做網站時,邊做邊紀錄的完整攻略,分享給需要的人。 給開發者/接案者的前言: Lovable 是一個強大的 AI 全端開發工具,要用它來賺錢,您必須清楚它的邊界在哪裡。這份指南將協助您完全掌控這個工具,從而自信地向客戶報價。 第一章:深度認識 Lovable 1.1
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
這是一場從「網路連結 → 線下見面」的活動,我一開始其實有些猶豫,畢竟地點對我來說不近,加上平常在社群裡其實不太主動互動。 但因為主辦人西打誠意滿滿地邀請,甚至還提出補貼車資,最後我決定自費參加。現在回頭看,真的很值得! 場地很有感,氛圍超溫暖 一踏進場地就被暖黃的燈光包圍,小閣樓超舒適,還
Thumbnail
這是一場從「網路連結 → 線下見面」的活動,我一開始其實有些猶豫,畢竟地點對我來說不近,加上平常在社群裡其實不太主動互動。 但因為主辦人西打誠意滿滿地邀請,甚至還提出補貼車資,最後我決定自費參加。現在回頭看,真的很值得! 場地很有感,氛圍超溫暖 一踏進場地就被暖黃的燈光包圍,小閣樓超舒適,還
Thumbnail
網站開發專案成功的關鍵在於與客戶的有效溝通。本文分享一個成功案例,說明如何透過明確掌握專案需求、主動提供技術方案、定期回報進度、完善技術協助及建立良好客戶關係,順利完成一個中文影片學習分享網站的建置,並獲得客戶高度滿意與後續合作機會。
Thumbnail
網站開發專案成功的關鍵在於與客戶的有效溝通。本文分享一個成功案例,說明如何透過明確掌握專案需求、主動提供技術方案、定期回報進度、完善技術協助及建立良好客戶關係,順利完成一個中文影片學習分享網站的建置,並獲得客戶高度滿意與後續合作機會。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
從實際應用中學習 Python 程式設計,提升技能並建立作品集。文章提供八個循序漸進的 Python 專案範例,涵蓋檔案操作、網路爬蟲、Web 應用、自動化腳本、數據分析、遊戲開發、API 互動及應用程式部署,並附上實戰建議及學習資源。
Thumbnail
從實際應用中學習 Python 程式設計,提升技能並建立作品集。文章提供八個循序漸進的 Python 專案範例,涵蓋檔案操作、網路爬蟲、Web 應用、自動化腳本、數據分析、遊戲開發、API 互動及應用程式部署,並附上實戰建議及學習資源。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News