问题描述
我有很长时间用来创建控件的一些代码,并且可以很好地工作,因为它可以正确捕获并释放鼠标(至少在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插件窗口中使用此代码时,一旦鼠标离开窗口,它就会丢失对鼠标的捕获。我需要进行一些调整才能使其正常工作吗?
解决方法
显然不能,但是可以在某些情况下使用指针锁定解决问题。