Դուք ունեք ձեր անիմացիան ձեր կայքում, բայց խնդիրն այն է, որ երբ դուք ոլորում եք դեպի այդ բաժինը, ձեր անիմացիան ավարտված է: Իհարկե, դուք ցանկանում եք, որ օգտվողը տեսնի ձեր անիմացիան, ուստի ինչպե՞ս եք պատրաստվում հետաձգել անիմացիան, մինչև այն տեսանելի լինի դիտակետին:
Այս հոդվածում ես ձեզ ցույց կտամ դա անելու մեկ եղանակ՝ օգտագործելով Intersection Observer API:
Ես ստեղծել եմ div տարր՝ դասի անվանմամբ «դեմո.
<div class="demo"><div>
Եվ ես սահմանեցի այս հատկությունները CSS-ում: Ես վերևում դրեցի 100 վժ, որպեսզի div տարրը չերևա էկրանին, որպեսզի ցույց տա անիմացիայի ժամանակը:
.demo{ width: 100vw; height: 200px; background: orange; top: 100vh; left: 0vw; position: relative; }
Ես ստեղծել եմ անիմացիան առանցքային կադրերի միջոցով: Ստորև ունեմ այս օրինակը, որը մենք կարող ենք օգտագործել css ֆայլի վրա: Սա կկենդանացնի տարրը ձախից աջ: Ես դրեցի ձախը -90vw, այնպես որ մենք կարող ենք ունենալ 10vw դեռ տեսանելի էկրանին, եթե ցանկանում եք, որ տարրը շարժվի ամեն անգամ, երբ այն տեսնում եք էկրանին: Ես դա ավելի ուշ կբացատրեմ:
@keyframes left-right { 0% {left: -90vw;}j 100% {left: 0px;}
Այնուհետև մենք կարող ենք օգտագործել այս առանցքային շրջանակը՝ սահմանելով animation-name, animation-duration և animation-iteration-count հատկությունը: Ստորև բերված օրինակը ձախից աջ դաս է, որը կարող ենք օգտագործել CSS ֆայլի վրա:
.left-right { animation-name: left-right; animation-duration: 2s; animation-iteration-count: 1; }
Հաջորդը javascript կոդ ստեղծելն է:
// create observer const observer = new IntersectionObserver(entries => { // Loop over the entries(even if we only asks one element to observe) entries.forEach(entry => { // If the element is visible if (entry.isIntersecting) { entry.target.classList.add('left-right'); return; // if we added the class, exit the function } // We're not intersecting, so remove the class! entry.target.classList.remove('left-right'); }); }); //tell observer to track the element observer.observe(document.querySelector('.demo'))
Յուրաքանչյուր տողի վերևի մեկնաբանությունները կբացատրեն javascript գործառույթը:
«entry.target.classList.remove(«ձախ-աջ»);» տողով հեռացրեք անիմացիան .ձախ-աջ դասը, երբ div տարրը տեսանելի չէ էկրանին: Հիշու՞մ եք մեր անիմացիայի կարգավորումներում 0%-ով մենք սահմանել ենք -90vh, որպեսզի տեսանելի լինի 10vh: Դրա պատճառն այն է, որ javascript ֆունկցիան դեռ կտեսնի div տարրը, և ձախ-աջ դասը չի հեռացվի, քանի դեռ անիմացիան ընթացքի մեջ է: Եթե անիմացիոն .ձախ-աջ դասը կդարձնի տարրը էկրանում տեսանելի չտեսնելու ինչ-որ պահի, այն ձեզ այլ արդյունք կտա, երբ ֆունկցիան կանչվի: js սկրիպտը չի տեսնի այն էկրանին, հետևաբար կհեռացնի դասը, այնուհետև div տարրը կունենա իր սկզբնական դիրքը, ձախից՝ 0vh, որը տեսանելի է, այնուհետև այն նորից կկանչի ֆունկցիան և կավելացնի անիմացիան։ Եվ հետո այն կրկին անտեսանելի կլինի անիմացիայի սկզբնական դիրքի պատճառով: Դասը կհեռացվի և կավելացվի նորից ու նորից, դուք չեք տեսնի անիմացիայի գործընթացը այնպես, ինչպես սպասում էիք: Դուք կարող եք հեռացնել «entry.target.classList.remove(«ձախ-աջ»);» տողը: եթե ցանկանում եք, որ անիմացիան գործարկվի միայն մեկ անգամ, ապա լավ կլինի, եթե ձեր անիմացիայի հետ դասը ինչ-որ պահի տարրը տեսանելի դարձնի:
Սա դիրքի/տեսանելիության վրա հիմնված անիմացիայի ընդամենը մեկ եղանակ է: Ձեր կայքում անիմացիա ունենալը գրավում և ստիպում է դիտողներին ավելի երկար մնալ: