Sklandus matomumo efektai slinkimo pagrindu sukurtoms animacijoms
Interaktyvūs žiniatinklio dizainai dažnai remiasi dinaminiais elementais, kurie koreguojami atsižvelgiant į vartotojo veiksmus, pvz., slinkimą. Viena bendra savybė yra valdyti neskaidrumas turinį, kai jis patenka į akis, sukuriant patrauklią patirtį.
Šiame straipsnyje nagrinėjame, kaip efektyviai kontroliuoti teksto elementų neskaidrumas „div“ viduje slinkimo metu. Ši technika gali būti ypač naudinga norint pabrėžti svarbų turinį skirtinguose slinkties etapuose.
Mes sutelksime dėmesį į konkretų naudojimo atvejį, kai vienas intervalas tampa matomas pirmiausia, o kitas intervalas išnyksta vėliau, vartotojui slenkant toliau. Šis metodas optimizuoja matomumo pakeitimų laiką, kad perėjimai būtų sklandesni.
Peržiūrėdami ir patobulindami dabartinį „JavaScript“ kodą, siekiame sklandžiau ir optimizuoti slinkimu pagrįstą neskaidrumo valdymas nereikalaujant rankinio reguliavimo. Pasinerkime į kodą ir sprendimą.
komandą | Naudojimo pavyzdys |
---|---|
getBoundingClientRect() | Grąžina elemento dydį ir jo padėtį peržiūros srities atžvilgiu. Šiame scenarijuje jis naudojamas padėčiai apskaičiuoti žinutę div, kad nustatytų, kada tarpatrams turėtų keistis neskaidrumas, atsižvelgiant į slinkties padėtį. |
window.innerHeight | Pateikiamas naršyklės lango matomos srities (peržiūros srities) aukštis. Tai labai svarbu nustatant slinkimo slenkstį, nuo kurio pradeda keistis tarpatramių neskaidrumas. |
Math.min() | Šis metodas grąžina mažiausią iš pateiktų skaičių. Jis naudojamas siekiant užtikrinti, kad apskaičiuotos neskaidrumo vertės neviršytų 1, todėl neskaidrumas išlieka tinkamame intervalų diapazone. |
Math.max() | Grąžina didžiausią iš pateiktų skaičių. Tai užtikrina, kad apskaičiuotos neskaidrumo vertės nenukristų žemiau 0, išvengiant neigiamų neskaidrumo verčių, kurios negalioja CSS. |
IntersectionObserver() | Naudojamas norint stebėti tikslinio elemento susikirtimo su protėvio elementu arba peržiūros sritį pokyčius. Šiame scenarijuje jis naudojamas tarpatramių matomumui stebėti ir jų neskaidrumui atnaujinti, atsižvelgiant į tai, kiek elemento matoma slenkant. |
threshold | Tai yra IntersectionObserver API nuosavybė. Jis apibrėžia taikinio matomumo procentą, kurio reikia prieš atliekant stebėtojo atgalinį skambutį. Scenarijuje nustatomi skirtingi slenksčiai, kad būtų galima koreguoti neskaidrumą, kai tarpai palaipsniui atsiranda. |
addEventListener('scroll') | Šis metodas prideda įvykių tvarkyklę prie „slinkimo“ įvykio lango objekto. Tai suaktyvina intervalų neskaidrumo pokyčius, kai vartotojas slenka per puslapį. |
style.opacity | Ši savybė nustato HTML elemento skaidrumo lygį. Reikšmė svyruoja nuo 0 (visiškai skaidrus) iki 1 (visiškai matoma). Scenarijus dinamiškai atnaujina šią reikšmę, kad slinkimo metu būtų sukurtas blukimo efektas. |
dispatchEvent() | Persiunčia įvykį objektui. Tai naudojama vienetų bandymuose, siekiant imituoti „slinkimo“ įvykį, užtikrinant, kad neskaidrumo keitimo funkcija tinkamai veiktų skirtingomis sąlygomis, nereikalaujant tikrosios vartotojo sąveikos. |
Slinkimu pagrįsto neskaidrumo valdymo optimizavimas „JavaScript“.
Pateiktame sprendime tikslas yra valdyti neskaidrumas iš dviejų teksto intervalų div, atsižvelgiant į vartotojo slinkimo elgseną. Pirmasis tarpatramis yra išdėstytas centre, naudojant lipnią padėtį, o antrasis tarpatramis yra padalijimo apačioje. Nustačius pradinį abiejų intervalų neskaidrumą iki nulio, siekiama, kad intervalai būtų matomi vartotojui slenkant, o kiekvienas intervalas išnyks skirtinguose taškuose. Taip sukuriamas dinamiškas ir vizualiai patrauklus efektas, kurį galima valdyti naudojant JavaScript.
Scenarijus naudoja slinkties įvykių klausytoją, kad galėtų stebėti div (su apimties) padėtį peržiūros srities atžvilgiu. Metodas „getBoundingClientRect()“ naudojamas norint gauti „div“ padėtį, kuri vėliau lyginama su iš anksto nustatytais lango aukščio procentais (pvz., 0,3 ir 0,6), nustatančiais, kada kiekvienas intervalas pradeda mažėti. Skaičiavimai atliekami siekiant sureguliuoti neskaidrumą kiekvieno intervalo, atsižvelgiant į jo santykinę padėtį, užtikrinant, kad perėjimas tarp paslėptos ir matomos būsenos būtų sklandus.
Kiekvieno intervalo neskaidrumas koreguojamas naudojant tiesinės interpoliacijos formulę. Šioje formulėje atsižvelgiama į elemento padėtį tarp pradžios ir pabaigos diapazono (pavyzdžiui, nuo 30 % iki 60 % peržiūros srities). Kai naudotojas slenka, neskaidrumas šiame diapazone palaipsniui didėja nuo 0 iki 1. Funkcijos „Math.min()“ ir „Math.max()“ naudojamos siekiant užtikrinti, kad neskaidrumo reikšmės neviršytų 1 arba nukristų žemiau 0, o tai užtikrina tinkamą perėjimą ir apsaugo nuo bet kokių atvaizdavimo problemų.
Scenarijus taip pat apima labiau optimizuotą metodą naudojant Intersection Observer API, kuris pašalina nuolatinių įvykių klausytojų poreikį stebint, kada elementai patenka į peržiūros sritį arba išeina iš jos. Tai yra efektyvesnis sprendimas, ypač scenarijams, kuriuose yra keli elementai arba sudėtingesnė animacija. Apibrėždamas slenksčius, sankryžos stebėtojas užtikrina, kad neskaidrumo pokyčiai būtų tvarkomi tik tada, kai reikia, taip pagerinant našumą ir sumažinant nereikalingus skaičiavimus.
Dinaminis slinkimu pagrįstas teksto neskaidrumo valdymas „JavaScript“.
„JavaScript“ sąsajos įdiegimas, skirtas valdyti teksto neskaidrumą pagal slinkimo įvykius, naudojant modulines funkcijas, kad būtų lengviau pakartotinai naudoti.
// Solution 1: Scroll-Based Opacity with Sticky and Absolute Elements
window.addEventListener('scroll', function() {
const message = document.querySelector('.message');
const span1 = document.querySelector('.message > span');
const span2 = document.querySelector('.vh > span');
const rect = message.getBoundingClientRect();
const windowHeight = window.innerHeight;
const fadeStart1 = windowHeight * 0.3, fadeEnd1 = windowHeight * 0.6;
const fadeStart2 = windowHeight * 0.5, fadeEnd2 = windowHeight * 0.9;
// Opacity calculation for span1
let opacity1 = Math.min(Math.max((fadeEnd1 - rect.top) / (fadeEnd1 - fadeStart1), 0), 1);
span1.style.opacity = opacity1;
// Opacity calculation for span2
let opacity2 = Math.min(Math.max((fadeEnd2 - rect.top) / (fadeEnd2 - fadeStart2), 0), 1);
span2.style.opacity = opacity2;
});
Slinkties neskaidrumo valdymo optimizavimas naudojant sankryžos stebėjimo priemonę
Naudojant Intersection Observer API efektyviau valdyti neskaidrumo perėjimus slinkimo metu ir sumažinti įvykių klausytojo naudojimą.
// Solution 2: Scroll-Based Opacity with Intersection Observer
const observer = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
const target = entry.target;
target.style.opacity = entry.intersectionRatio;
});
}, { threshold: [0, 0.5, 1] });
// Selecting elements for observation
observer.observe(document.querySelector('.message > span'));
observer.observe(document.querySelector('.vh > span'));
Slinkimu pagrįsto neskaidrumo valdymo vienetų testai
Abiejų sprendimų rašymo vienetų testai naudojant „Jasmine“, kad patikrintų neskaidrumo pokyčius, kaip tikimasi slenkant.
// Solution 3: Unit Test for Opacity Control
describe('Scroll Opacity Control', function() {
it('should update span1 opacity on scroll', function() {
const span1 = document.querySelector('.message > span');
window.dispatchEvent(new Event('scroll'));
expect(span1.style.opacity).not.toBe('0');
});
it('should update span2 opacity on scroll', function() {
const span2 = document.querySelector('.vh > span');
window.dispatchEvent(new Event('scroll'));
expect(span2.style.opacity).not.toBe('0');
});
});
Pažangūs slinkimu pagrįsto neskaidrumo valdymo metodai
Vienas dažnai nepastebimas slinkimu pagrįsto neskaidrumo valdymo aspektas yra našumo optimizavimas, ypač kai naudojami keli elementai. Didėjant elementų skaičiui, dinaminiam neskaidrumui reguliuoti reikalingas skaičiavimas gali apkrauti naršyklę. Čia tokios technikos kaip atsimušimas arba droselis gali būti naudinga. Šie metodai padeda apriboti dažnumą, kuriuo slinkimo įvykiai suaktyvina skaičiavimus, pagerindami bendrą tinklalapio našumą sumažindami nereikalingų naujinimų skaičių.
Kitas aspektas, į kurį reikia atsižvelgti, yra vartotojo patirtis. Labai svarbu užtikrinti, kad slinkties suaktyvinami perėjimai būtų sklandūs ir vizualiai patrauklūs. Tai galima pasiekti naudojant CSS perėjimas ypatybes kartu su JavaScript. Nurodant perėjimo laiką, neskaidrumo pokyčiai atrodo laipsniškai, todėl turinys tampa labiau nušlifuotas. Tai gali labai pagerinti svetainės naudojimo patogumą, todėl ji reaguos į vartotojo veiksmus, neapsunkindama jų staigiais pakeitimais.
Be to, įgyvendinant tokį poveikį svarbu atsižvelgti į prieinamumą. Naudotojams, turintiems skirtingus gebėjimus arba naudojantiems pagalbines technologijas, gali kilti sunkumų sąveikaujant su slenkančiu turiniu. Teikiant alternatyvius metodus pasiekti tą pačią informaciją, pvz., klaviatūros naršymą ar ekrano skaitytuvus, užtikrinama, kad turinys būtų prieinamas visiems. Pridedama ARIJA (Accessible Rich Internet Applications) atributai, apibūdinantys vaizdinius pokyčius, gali pagerinti naudotojų, kurie pasitiki ekrano skaitytuvais, patirtį.
Dažniausiai užduodami klausimai apie slinkimu pagrįstą neskaidrumo valdymą
- Kaip apriboti slinkimo įvykių aktyviklių skaičių?
- Galite naudoti debounce arba throttle metodai, skirti sumažinti slinkties įvykių vykdymo dažnį.
- Koks yra geriausias būdas sukurti sklandžius perėjimus?
- Naudokite CSS transition ypatybę kartu su „JavaScript“, kad nepermatomumo pokyčiai būtų sklandūs.
- Kaip užtikrinti, kad mano slinkties efektai būtų pasiekiami?
- Pridėti ARIA atributus ir būtinai išbandykite naudodami ekrano skaitytuvus ir alternatyvius naršymo metodus.
- Kas yra Intersection Observer API?
- Tai naršyklės funkcija, leidžianti stebėti, kada elementai patenka į peržiūros sritį arba iš jos išeina, optimizuojant slinkimo efektus.
- Ar galiu pritaikyti nepermatomumo pakeitimus keliems elementams?
- Taip, naudojant a forEach ciklas „JavaScript“, galite dinamiškai pritaikyti pakeitimus keliems elementams.
Paskutinės mintys apie slinkimu pagrįstą neskaidrumo valdymą
Slinkimu pagrįsti neskaidrumo efektai gali pagerinti naudotojo patirtį, palaipsniui atskleidžiant turinį jiems naršant puslapį. Naudojant JavaScript, šie perėjimai gali būti sklandūs ir efektyvūs. Tokių metodų naudojimas kaip getBoundingClientRect padeda nustatyti tikslų neskaidrumo reguliavimo momentą.
Optimizuotų metodų, tokių kaip Sankryžų stebėtojas dar labiau pagerina našumą, sumažinant nereikalingus skaičiavimus. Šių metodų derinimas suteikia elegantišką nepermatomumo perėjimų valdymo sprendimą, prisidedantį prie tinklalapių estetikos ir funkcionalumo.
Slinkimu pagrįstų neskaidrumo valdymo metodų nuorodos
- Išplėtotas teksto neskaidrumo valdymo metodas naudojant „JavaScript“ slinkimo įvykius. Išsamius paaiškinimus galite rasti šiame šaltinyje: MDN žiniatinklio dokumentai – slinkties įvykis .
- Šis šaltinis apima naudojimą ir naudą Intersection Observer API veiksmingoms slinkties animacijai.
- Norėdami gauti geriausios praktikos, kaip pagerinti slinkties našumą naudojant atmetimo ir mažinimo metodus, apsilankykite: CSS gudrybės – atmetimas ir sumažinimas .