12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- const offset = 10;
- const signCalss = 'mywow';
- const animateClass = 'animate__animated';
- export default defineNuxtPlugin((nuxtApp) => {
- const innerHeight = window.innerHeight - offset;
- const onAnimated = () => {
- const wowEl = document.querySelectorAll(`.${signCalss}`);
- try {
- if (wowEl && wowEl.length > 0) {
- wowEl.forEach(el => {
- // const elClassStr = el.classList.value || '';
- if (!el.classList.contains(animateClass)) {
- // 元素距离可视区顶部的距离 = 元素距离页面顶部的距离 - 页面向上滚动的距离
- const ks_h = el.offsetTop - window.scrollY;
- // 当元素到达 加载动画区域以内时,动态处理动画class
- if (ks_h <= innerHeight && ks_h > offset) {
- // console.log("el.getAttribute('animate')", el)
- const animateParams = el.getAttribute('animate-param').split(',')
- el.classList.remove(signCalss);
- if (animateParams && animateParams.length > 0) {
- let str = animateClass;
- animateParams.forEach(ap => {
- el.classList.add(`animate__${ap}`)
- })
- el.classList.add(animateClass)
- }
- }
- }
- })
- }
- } catch { }
- }
- window.addEventListener("scroll", onAnimated);
- nuxtApp.provide('onAnimated', onAnimated);
- })
|