$$plugins.define('scrollShadowVert', function (element, options) { var scrollElm = element.querySelector('.scrollbar'), listInner = element.querySelector('.scrollbar__inner'); //observer for adding/removing children elements const observer = new MutationObserver(function (mutations) { var childrenMutations = mutations.filter((x) => x.type === "childList"); if (childrenMutations.length > 0) { checkScrollPos(scrollElm); } }); observer.observe(listInner, { subtree: true, childList: true }); //observer for initialized class if (options.initialize == true) { const targetNode = element; const observer2 = new MutationObserver(function (mutations) { var classMutations = mutations.filter((x) => x.type === "attributes"); if (classMutations.length > 0 && targetNode.classList.contains('initialized')) { checkScrollPos(scrollElm); observer2.disconnect(); } }); observer2.observe(targetNode, { attributes: true, attributeFilter: ['class'] }); } checkScrollPos(scrollElm); scrollElm.addEventListener("scroll", function () { checkScrollPos(this); }); function checkScrollPos(scrollContainer) { if (scrollContainer.scrollTop + element.offsetHeight > listInner.offsetHeight - 8) { element.classList.add('scrollbarShadow--bottom'); } else { element.classList.remove('scrollbarShadow--bottom'); } if (scrollContainer.scrollTop < 8) { element.classList.add('scrollbarShadow--top'); } else { element.classList.remove('scrollbarShadow--top'); } } //checkScrollInit(); //function checkScrollInit() { // if (element.offsetHeight >= listInner.offsetHeight) { // element.classList.add('scrollbarShadow--noScroll'); // } else { // element.classList.remove('scrollbarShadow--noScroll'); // } //} });