UNPKG

maycur-business

Version:

maycur business react components of web

76 lines (60 loc) 2.25 kB
"use strict"; 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)"); }