ahooks
Version:
react hooks library
73 lines (72 loc) • 2.26 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _useRafState3 = _interopRequireDefault(require("../useRafState"));
var _useEventListener = _interopRequireDefault(require("../useEventListener"));
var _domTarget = require("../utils/domTarget");
var initState = {
screenX: NaN,
screenY: NaN,
clientX: NaN,
clientY: NaN,
pageX: NaN,
pageY: NaN,
elementX: NaN,
elementY: NaN,
elementH: NaN,
elementW: NaN,
elementPosX: NaN,
elementPosY: NaN
};
var _default = exports["default"] = function _default(target) {
var _useRafState = (0, _useRafState3["default"])(initState),
_useRafState2 = (0, _slicedToArray2["default"])(_useRafState, 2),
state = _useRafState2[0],
setState = _useRafState2[1];
(0, _useEventListener["default"])('mousemove', function (event) {
var screenX = event.screenX,
screenY = event.screenY,
clientX = event.clientX,
clientY = event.clientY,
pageX = event.pageX,
pageY = event.pageY;
var newState = {
screenX: screenX,
screenY: screenY,
clientX: clientX,
clientY: clientY,
pageX: pageX,
pageY: pageY,
elementX: NaN,
elementY: NaN,
elementH: NaN,
elementW: NaN,
elementPosX: NaN,
elementPosY: NaN
};
var targetElement = (0, _domTarget.getTargetElement)(target);
if (targetElement) {
var _targetElement$getBou = targetElement.getBoundingClientRect(),
left = _targetElement$getBou.left,
top = _targetElement$getBou.top,
width = _targetElement$getBou.width,
height = _targetElement$getBou.height;
newState.elementPosX = left + window.pageXOffset;
newState.elementPosY = top + window.pageYOffset;
newState.elementX = pageX - newState.elementPosX;
newState.elementY = pageY - newState.elementPosY;
newState.elementW = width;
newState.elementH = height;
}
setState(newState);
}, {
target: function target() {
return document;
}
});
return state;
};