我可以在 Figma 插件 window 中捕获鼠标指针吗?

Can I capture the mouse pointer in a Figma plugin window?

我有一些代码我已经用了很长时间来创建控件,并且运行良好,因为它正确地捕获和释放鼠标(至少在 chrome 中)。

function createSlider(slider, width, height)
{
    slider.width  = width;
    slider.height = height;

    slider.style.display = 'inline';

    //

    slider.onchange = new Event('onchange');

    //

    slider.addEventListener('mousedown', function(e)
    {
        var e = window.event || e;

        if (e.button == 0)
        {
            e.preventDefault();
     
            if (slider.setCapture)
                slider.setCapture();
            
            slider.mouseDown0 = true;
            slider.sx         = e.clientX;
            slider.sv         = slider.value;
        }
    });

    slider.addEventListener('losecapture', function()
    {
        slider.mouseDown0 = false;
    });

    document.addEventListener('mouseup', function(e)
    {
        var e = window.event || e;

        if (e.button == 0 && slider.mouseDown0)
            slider.mouseDown0 = false;
    }, true);

    (slider.setCapture ? slider : document).addEventListener('mousemove', function(e)
    {
        if (slider.mouseDown0)
        {
            var dx = slider.sx - e.clientX;
            var adaptive = 10 * Math.pow(Math.abs(dx), slider.acc);

            slider.value = Math.min(Math.max(slider.min, slider.sv - dx*slider.scale*adaptive), slider.max);
            //TODO: if (log) do log scaling
            slider.paint();
            slider.dispatchEvent(slider.onchange);
        }
    }, true);

    slider.onmousewheel = function(e)
    {
        e.preventDefault();

        var s = e.target;

        s.value = Math.min(Math.max(s.min, s.value + (e.wheelDeltaY > 0 ? 1 : -1) * s.scale), s.max);
        s.dispatchEvent(s.onchange);
        s.paint();
    };

    slider.paint = function()
    {
        //...
    };

    //

    slider.paint();
}

但是当我尝试在 Figma 插件中使用此代码时 window,一旦鼠标离开 window,它就会失去鼠标捕获。我需要调整什么才能使其正常工作吗?

显然你不能,但在某些情况下你可以使用指针锁定来解决问题。