forAny=function (selector, callbackfn, container){
container=container||document;
container.querySelectorAll(selector).forEach(callbackfn);
};
onAny=function (selector, type, callbackfn, container){
container=container||document;
container.querySelectorAll(selector).forEach(element=> element.addEventListener(type, event=> {
callbackfn(element, event);
}));
};
whenVisible=function (selector, callbackfn, container){
container=container||document;
let observer=new IntersectionObserver(observer_callback, {
root: null,
rootMargin: '0px',
threshold: 0
});
forAny(selector, element=> observer.observe(element), container);
function observer_callback(changes, observer){
changes.forEach(change=> {
if(change.isIntersecting){
observer.unobserve(change.target);
callbackfn(change.target);
}});
}};