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

Javascript 我可以在Figma插件窗口中捕获鼠标指针吗?,javascript,plugins,window,capture,figma,Javascript,Plugins,Window,Capture,Figma,我有一些很长一段时间用来创建控件的代码,它工作得很好,因为它可以正确地捕获和释放鼠标(至少在chrome中是这样) 但当我尝试在Figma插件窗口中使用此代码时,一旦鼠标离开窗口,它就会丢失鼠标捕获。有什么我需要调整才能工作吗?显然你不能,但在某些情况下,你可以使用指针锁来解决这个问题 function createSlider(slider, width, height) { slider.width = width; slider.height = height;

我有一些很长一段时间用来创建控件的代码,它工作得很好,因为它可以正确地捕获和释放鼠标(至少在chrome中是这样)


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

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

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();
}