Позиционирование окна без полей в нейтралино.js
Есть ли способ разместить окно без полей в файле нейтралино.config.json?
like : "borderless": { ...args }
или любыми другими способами? Теперь он просто начинается где-то случайно и не может быть перемещен
3 ответа
Вы можете позвонить в свой javascript. (0,0) - это (крайний левый, верхний) экрана. Вы можете найти другие оконные функции по адресу https://neutralino.js.org/docs/api/window.
В продолжение вашего вопроса и, как подсказывает инстинкт Клаусса А., вы можете позвонить
Neutralino.window.setDraggableRegion('id-of-element')
куда
id-of-element
является, как следует из названия, идентификатором элемента в вашем html. Затем, когда вы щелкните и перетащите этот элемент, Neutralino автоматически вызовет
Neutralino.window.move(x,y)
.
setDraggableRegion()
нет в документации, но вы можете увидеть его в учебнике, который они сделали на YouTube, и он все еще находится в коде.
Дело в том, что Neutralino делает это, отправляя сообщение на сервер, что добавляет немало задержки, вызывая прерывание перетаскивания. Вот соответствующий фрагмент кода в усовершенствованной версии файла нейтралино.js:
...
t.move = function(e, t) {
return r.request({
url: "window.move",
type: r.RequestType.POST,
isNativeMethod: !0,
data: {
x: e,
y: t
}
})
}, t.setDraggableRegion = function(e) {
return new Promise(((t, i) => {
let r = document.getElementById(e),
o = 0,
u = 0;
function s(e) {
return n(this, void 0, void 0, (function*() {
yield Neutralino.window.move(e.screenX - o, e.screenY - u)
}))
}
r || i(`Unable to find dom element: #${e}`), r.addEventListener("mousedown", (e => {
o = e.clientX, u = e.clientY, r.addEventListener("mousemove", s)
})), r.addEventListener("mouseup", (() => {
r.removeEventListener("mousemove", s)
})), t()
}))
}
...
Я подозревал, что эта формулировка увеличивает задержку, поскольку
function*
является генератором и поэтому по своей сути ненадежен (необходима цитата). Я переписал его на простом javascript и немного уменьшил отставание. Он все еще заикается, только не так сильно.
var dragging = false, posX, posY;
var draggableElement = document.getElementById('id-of-element');
draggableElement.onmousedown = function (e) {
posX = e.pageX, posY = e.pageY;
dragging = true;
}
draggableElement.onmouseup = function (e) {
dragging = false;
}
document.onmousemove = function (e) {
if (dragging) Neutralino.window.move(e.screenX - posX, e.screenY - posY);
}
Надеюсь, это поможет. Я копался во всем этом, потому что строка заголовка (также известная как строка заголовка) окна отличается от цветовой темы моей системы. Я подумал: «Может быть, я создам свою собственную строку заголовка в HTML со стилем CSS, соответствующим моему приложению». Но из-за проблем с заиканием я считаю, что лучше иметь перетаскиваемую по умолчанию строку заголовка, которая ничего не соответствует. Я все еще копаюсь в коде Neutralino C ++, чтобы посмотреть, могу ли я его изменить и добавить неклиентский обработчик сообщений рендеринга (в Windows), чтобы окрасить строку заголовка так же, как мое приложение, и по-прежнему иметь приятное плавное перетаскивание. Таким образом, он будет выглядеть «без полей», но при этом его можно будет перемещать.
Я с той же проблемой. Мой наивный инстинкт подсказывает мне, что, вероятно, это может быть способ создать настраиваемую панель элементов и использовать функцию при щелчке и перетаскивании для перемещения окна.
Переместить Windows в Neutralino довольно просто.
Вы можете использовать
Neutralino.window
API для перемещения окон.
Пример:
Neutralino.window.move(x, y);
здесь
x
а также
y
Координаты, по которым будет перемещаться наше окно.
Обратите внимание, что это перемещает окно из верхнего левого угла окна.
Я сделал этот шаблон Neutralino — приложение NeutralinoJS с настраиваемой панелью заголовков , который может быть полезен, если вы создаете настраиваемую панель заголовка для своего приложения.