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

问题描述

我有很长时间用来创建控件的一些代码,并且可以很好地工作,因为它可以正确捕获并释放鼠标(至少在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插件窗口中使用此代码时,一旦鼠标离开窗口,它就会丢失对鼠标的捕获。我需要进行一些调整才能使其正常工作吗?

解决方法

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...