Issue with Mouse Tracking in Figma Plugin
I’ve been working on a custom control component that needs to track mouse movements even when the cursor goes outside the plugin window. This works perfectly in regular web browsers but seems to break in Figma’s plugin environment.
function initializeControl(element, w, h) {
element.width = w;
element.height = h;
element.style.display = 'block';
element.changeEvent = new Event('valueChanged');
element.addEventListener('mousedown', function(event) {
if (event.button === 0) {
event.preventDefault();
if (element.setCapture) {
element.setCapture();
}
element.isDragging = true;
element.startX = event.clientX;
element.initialValue = element.value;
}
});
element.addEventListener('losecapture', function() {
element.isDragging = false;
});
document.addEventListener('mouseup', function(event) {
if (event.button === 0 && element.isDragging) {
element.isDragging = false;
}
}, true);
(element.setCapture ? element : document).addEventListener('mousemove', function(event) {
if (element.isDragging) {
var deltaX = element.startX - event.clientX;
var sensitivity = 8 * Math.pow(Math.abs(deltaX), element.acceleration);
element.value = Math.min(Math.max(element.minValue, element.initialValue - deltaX * element.step * sensitivity), element.maxValue);
element.render();
element.dispatchEvent(element.changeEvent);
}
}, true);
element.addEventListener('wheel', function(event) {
event.preventDefault();
var target = event.target;
target.value = Math.min(Math.max(target.minValue, target.value + (event.deltaY < 0 ? 1 : -1) * target.step), target.maxValue);
target.dispatchEvent(target.changeEvent);
target.render();
});
element.render = function() {
// rendering logic here
};
element.render();
}
The problem is that mouse capture gets lost as soon as the pointer moves outside the plugin window boundaries. Has anyone found a workaround for this limitation in Figma plugins?