roseworx
Version:
Front end css and js framework
47 lines (42 loc) • 1.39 kB
JavaScript
const rwxSlide = {
resourceName: 'rwxSlide',
slideClass: 'rwx-slide-expanded',
slideDown: (el, duration, cb=()=>{}) => {
const d = duration || 1;
if(el.offsetHeight > 0){return}
el.removeAttribute('style');
el.style.display = "block";
el.style.overflow = "hidden";
el.style.opacity = 0;
const height = el.getBoundingClientRect().height;
el.style.height = 0;
el.style.transition = `all ${d}s cubic-bezier(.13,1.06,.98,1)`;
requestAnimationFrame(()=>{
el.style.height = height+'px';
el.style.opacity = 1;
el.classList.add(rwxSlide.slideClass);
setTimeout(cb, d*1000);
return;
});
},
slideUp: (el, duration, cb=()=>{}) => {
const d = duration || 1;
if(el.offsetHeight <= 0){return;}
el.removeAttribute('style');
el.style.transition = `all ${d}s cubic-bezier(.13,1.06,.98,1)`;
el.style.height = el.getBoundingClientRect().height + "px";
el.style.overflow = "hidden";
el.style.opacity = 1;
window.requestAnimationFrame(()=>{
el.style.height = "0px";
el.style.opacity = 0;
el.classList.remove(rwxSlide.slideClass);
setTimeout(cb, d*1000);
return;
});
},
slideToggle: (el, duration, cb=()=>{}) => {
el.offsetHeight <= 0 ? rwxSlide.slideDown(el,duration,cb) : rwxSlide.slideUp(el,duration,cb);
}
};
export default rwxSlide;