maycur-business
Version:
maycur business react components of web
76 lines (60 loc) • 2.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = followCursorHandler;
var _globals = require("./globals");
var _getCorePlacement = _interopRequireDefault(require("../utils/getCorePlacement"));
var _find = _interopRequireDefault(require("../utils/find"));
var _prefix = _interopRequireDefault(require("../utils/prefix"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
/**
* Mousemove event listener callback method for follow cursor setting
* @param {MouseEvent} e
*/
function followCursorHandler(e) {
var _this = this;
var refData = (0, _find["default"])(_globals.Store, function (refData) {
return refData.el === _this;
});
if (!refData) return;
var popper = refData.popper,
offset = refData.settings.offset;
var position = (0, _getCorePlacement["default"])(popper.getAttribute('x-placement'));
var halfPopperWidth = Math.round(popper.offsetWidth / 2);
var halfPopperHeight = Math.round(popper.offsetHeight / 2);
var viewportPadding = 5;
var pageWidth = document.documentElement.offsetWidth || document.body.offsetWidth;
var pageX = e.pageX,
pageY = e.pageY;
var x, y;
switch (position) {
case 'top':
x = pageX - halfPopperWidth + offset;
y = pageY - 2.25 * halfPopperHeight;
break;
case 'left':
x = pageX - 2 * halfPopperWidth - 10;
y = pageY - halfPopperHeight + offset;
break;
case 'right':
x = pageX + halfPopperHeight;
y = pageY - halfPopperHeight + offset;
break;
case 'bottom':
x = pageX - halfPopperWidth + offset;
y = pageY + halfPopperHeight / 1.5;
break;
}
var isRightOverflowing = pageX + viewportPadding + halfPopperWidth + offset > pageWidth;
var isLeftOverflowing = pageX - viewportPadding - halfPopperWidth + offset < 0; // Prevent left/right overflow
if (position === 'top' || position === 'bottom') {
if (isRightOverflowing) {
x = pageWidth - viewportPadding - 2 * halfPopperWidth;
}
if (isLeftOverflowing) {
x = viewportPadding;
}
}
popper.style[(0, _prefix["default"])('transform')] = "translate3d(".concat(x, "px, ").concat(y, "px, 0)");
}