【问题标题】:Positioning the borderless window in neutralino.js在neutino.js中定位无边框窗口
【发布时间】:2023-03-25 01:24:01
【问题描述】:

有什么方法可以在文件neutino.config.json 中定位无边框窗口?

like : "borderless": { ...args }

或任何其他方式? 现在它只是从某个随机位置开始,无法移动

【问题讨论】:

    标签: neutralinojs


    【解决方案1】:

    您可以在您的 javascript 中调用Neutralino.window.move(x,y)。 (0,0) 是屏幕的(最左侧,顶部)。您可以在https://neutralino.js.org/docs/api/window 找到其他窗口功能。

    作为您问题的延伸,就像 Klauss A 的直觉所暗示的那样,您可以调用 Neutralino.window.setDraggableRegion('id-of-element'),其中 id-of-element 顾名思义,是您 html 中元素的 id。然后,当您单击并拖动该元素时,Neutralino 将自动调用Neutralino.window.move(x,y)setDraggableRegion() 不在文档中,但你可以在他们在 YouTube 上制作的 the tutorial 中看到它,它仍然在代码中。

    问题是,Neutralino 是通过向服务器发布消息来做到这一点的,这会增加相当多的延迟,导致拖拽不流畅。这是neutino.js文件的美化版本中的相关代码sn-p:

    ...
    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++ code 中挖掘,看看我是否可以修改它并添加一个非客户端呈现消息处理程序(在 Windows 上),以使标题栏的颜色与我的应用程序相同,并且仍然具有很好的平滑拖动效果。这样它看起来“无边界”,但仍然是可移动的。

    【讨论】:

      【解决方案2】:

      我也有同样的问题。我天真的直觉告诉我,这可能是一种创建自定义元素栏并在单击和拖动时使用函数来移动窗口的方法。

      【讨论】:

        【解决方案3】:

        在 Neutralino 中移动窗口非常简单。

        您可以使用Neutralino.window API 来移动窗口。

        例子:

        Neutralino.window.move(x, y);
        

        这里的xy 是我们的窗口将移动到的坐标。

        请注意,这会将窗口从窗口的左上角移动。

        我制作了这个 Neutralino 模板 - NeutralinoJS App With Custom Titlebar,如果您正在为您的应用程序制作自定义标题栏,它可能会很有用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-06-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多