Как я могу изменить размер окна влево, когда приложение Electron закреплено в правой части экрана?

Я создаю приложение Electron, в котором мы хотим, чтобы панель инструментов для навигации была прикреплена к правой стороне экрана. Он должен быть справа, потому что большинство наших пользователей работают в Windows, а пристыковка его слева означала бы, что он перекрывает множество значков и закрывается меню «Пуск».

Когда пользователь щелкает значок, мне нужно, чтобы окно открывалось/изменялось влево.

При запуске приложения я создаю новое окно

mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    center: true,
    backgroundColor: '#18A4FC'
  })

Затем, после аутентификации пользователя, я использую ipcRender для отправки сообщения об успешном завершении в файл main.js. В настоящее время это «закрепляет» окно в правой части экрана, используя метод setBounds и размеры экрана.

ipcMain.on('login-success', () => {
  let display = electron.screen.getPrimaryDisplay()
  const { width, height } = display.bounds
  mainWindow.setBounds({
    x: width - 40,
    y: 0,
    width: 40,
    height: height
  })
})

Затем, когда пользователь щелкает значок, я использую setSize, чтобы «открыть» док-станцию. Это означает, что я изменяю ширину окна с 40 до 480 пикселей. Но он открывается вправо, за кадром. Мне нужно, чтобы он открывался влево.

ipcMain.on('resize-open', () => {
  let display = electron.screen.getPrimaryDisplay()
  const { height } = display.bounds
  mainWindow.setSize(480, height)
})

Любые идеи, как это сделать? Я понимаю, что ширина и высота задаются от верхнего левого угла до 0,0. Любой способ сбросить это?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
0
1 291
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Может быть, вы могли бы попробовать что-то вроде:

mainWindow.setBounds({
  x: 0,
  y: 0,
  width: 480,
  height: height
})

Вместо:

mainWindow.setSize(480, height)

Потому что функция setBounds сбрасывает положение окна (в данном случае до 0,0), а также устанавливает ширину и высоту.

Ответ принят как подходящий

В итоге я использовал setBounds, но вместо этого переместил его влево на сумму, которая мне нужна, чтобы он был открыт.

  let display = electron.screen.getPrimaryDisplay()
  const { width, height } = display.bounds
  mainWindow.setBounds({
    x: width - 320 ,
    y: height,
    width: 320,
    height: height
  })
})```

Молодец, что нашел свой собственный ответ! Если вы удовлетворены своим ответом, примите его, нажав на серую галочку под кнопками голосования.

Joshua 12.04.2019 09:02

Другие вопросы по теме