@teamsparta/blog-system
Version:
57 lines • 2.73 kB
JavaScript
;
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var react_1 = require("react");
var lodash_throttle_1 = __importDefault(require("lodash.throttle"));
var logs_1 = require("../logs");
function useScrollRecording(serviceType, contents, percentages, sendLog) {
var _a = (0, react_1.useState)(0), scrollPercentage = _a[0], setScrollPercentage = _a[1];
var _b = (0, react_1.useState)([]), triggeredEvents = _b[0], setTriggeredEvents = _b[1];
var sendLogStatusObj = {
20: false,
40: false,
60: false,
80: false,
100: false,
};
var content_title = contents.content_title, content_tag = contents.content_tag;
(0, react_1.useEffect)(function () {
var handleScroll = (0, lodash_throttle_1.default)(function () {
var scrollPosition = window.pageYOffset;
var pageHeight = document.documentElement.scrollHeight;
var windowHeight = window.innerHeight;
var scrollableHeight = pageHeight - windowHeight;
var currentScrollPercentage = (scrollPosition / scrollableHeight) * 100;
var untriggeredEvents = percentages.filter(function (percentage) {
return currentScrollPercentage >= percentage &&
!triggeredEvents.includes(percentage);
});
if (untriggeredEvents.length > 0 &&
!sendLogStatusObj[untriggeredEvents[0]]) {
var newPercentage = untriggeredEvents[0];
setScrollPercentage(newPercentage);
setTriggeredEvents(__spreadArray(__spreadArray([], triggeredEvents, true), [newPercentage], false));
sendLogStatusObj[newPercentage] = true;
(0, logs_1.sendScrollDetailPageLog)(serviceType, content_title, content_tag, newPercentage, sendLog);
}
}, 400);
window.addEventListener("scroll", handleScroll);
return function () {
window.removeEventListener("scroll", handleScroll);
};
}, [percentages, scrollPercentage, triggeredEvents]);
return scrollPercentage;
}
exports.default = useScrollRecording;
//# sourceMappingURL=useScrollPercentage.js.map