【问题标题】:Can I capture the mouse pointer in a Figma plugin window?我可以在 Figma 插件窗口中捕获鼠标指针吗?
【发布时间】:2021-01-01 21:39:35
【问题描述】:

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

【问题讨论】:

    标签: javascript plugins window capture figma


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2019-06-06
      • 2016-03-05
      • 2011-01-29
      • 1970-01-01
      • 2021-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多