-
დავუბრუნდეთ Oh noes-ის დროის ათვლას.
-
როგორ მოვიქცეთ თუ გვინდა
Oh noes გამოსახულება გაიზარდოს,
-
როცა დროის ათვლა ნულს მიუახლოვდება?
-
-- გარდაუვალ უბედურებას
რომ მოასწავებდეს --
-
ამისი გაკეთების ერთი გზა
არის CSS-ის სტილის ანიმირება
-
Window.setInterval-ის გამოყენებით.
-
პირველი ნაბიჯისთვის,
სურათს ცვლადში მოვათავსებთ,
-
შემდეგ, დავწერთ საწყის სტილს,
-
ეს იმისთვის, რომ რამით დავიწყოთ.
-
შემდეგ კი დავწერთ makeItBigger ფუნქციას.
-
აქ საჭირო იქნება style.width-ის შეცვლა,
-
ავიღებთ წინა style.width-ს
და დავუმატებთ ერთს.
-
საბოლოოდ, ამ ფუნქციით
გამოვიძახებთ setInterval-ს,
-
-- რამდენად ხშირად გვინდა იზრებოდეს?
-
სუფთა ანიმაცია გვინდა, რაც ნიშნავს
დაახლოებით 24-დან 60 კადრამდე წამში.
-
მოდით იყოს 30 კადრი წამში.
-
არ მუშაობს. ხედავთ რატომ? ცოტა ეშმაკურია.
-
რა არის ohnoes.style.width-ის
მნიშვნელობა ამ ხაზის შემდეგ?
-
შეიძლება იფიქროთ,
რომ 50px გადადის 51px-ში,
-
მაგრამ მოდით ვნახოთ
რა იქნება ohnoes.style.width
-
50px-ს ვუმატებთ ერთს.
-
რას უდრის 50px პლუს ერთი?
-
შეიძლება იფიქროთ რომ ეს 51px იქნება,
-
მაგრამ ჯავასკრიპტი
50px-ს აღიქვამს string-ად,
-
ამიტომ პასუხი გამოვა
50px1, რაც უშინაარსოა.
-
ესეიგი, ბრაუზერი უბრალოდ
არ აქცევს ყურადღებას ამ უშინაარსობას.
-
საჭიროა ეს სიდიდე რიცხვად გადავიყვანოთ,
-
შემდეგ, რიცხვს დავუმატოთ ერთი,
-
შემდეგ კი ისევ გადავაქციოთ px-ად.
-
ამისთვის ეს სიდიდე თავიდან
მოვათავსოთ parseFloat-ში,
-
რაც მას რიცხვად გადააქცევს,
-
შემდეგ ვუმატებთ ერთს და
ბოლოს ისევ ვუმატებთ px-ს.
-
ძალიან კარგი, იზრდება!
-
როგორც ხედავთ, CSS-ის ანიმაციებში
ზოგჯერ საქმე გვაქვს ერთეულებთან,
-
რომლებიც უნდა მოვაშოროთ სიდედეებს,
-
შემდეგ კი ისევ დავაბრუნოთ.
-
CSS-ის ანიმაციების
თვისებებთან setInterval-ის გამოყენებისას
-
არის გარკვეული სირთულეები.
-
პირველი, ბრაუზერი
არ იძლევა იმის გარანტიას,
-
რომ ზუსტად ისე შეასრულებს
პაუზას როგორც მივუთითებთ.
-
თუ სხვა რაღაცები ჩაერია,
მაგალითად ბეჭდვა მომხმარებლისგან,
-
შესაძლოა callback უფრო
გვიან იქნეს გამოძახებული.
-
მაშინ სუფთა ანიმაციას ვერ მივიღებთ.
-
მეორე - ბრაუზერი იმ
შემთხვევაშიც გამოიძახებს ფუნქციას,
-
როცა ეს tab დახურულია.
-
ეს არაა საჭირო მაგრამ
კომპიუტერის მეხსიერებას მაინც იკავებს.
-
ამიტომ თანამედროვე
ბრაუზერებში სხვა ფუნქცია არსებობს,
-
სპეციალურად ასეთი ანიმაციებისთვის
-
და ეწოდება
window.requestAnimationFrame
-
მის გამოსაყენებლად
მოვიშოროთ setInterval ხაზი.
-
გამოვიძახოთ requestAnimationFrame
ფუნქციის შიგნიდან
-
და მივუთითოთ makeItBigger ფუნქციაზე,
-
შემდეგ კი makeItBigger-ს გამოვიძახებთ.
-
ამჯერად გაცილებით სწრაფია!
-
ბრაუზერი ახლა
makeItBigger-ს დახატვამდე იძახებს,
-
რაც დაახლოებით 60 კადრია წამში,
-
წინანდელზე ორჯერ სწრაფი.
-
სიგანეს ყოველ ჯერზე ერთ პიქსელს ვუმატებთ.
-
ესეიგი წამში ვუმატებთ 60 პიქსელს.
-
რამდენიმე წამში
გამოსახულება გვერდზე დიდი ხდება
-
უკვე აღარც ჩანს.
-
როგორ შევანელოთ ანიმაცია?
-
რამდენიმე გზა არსებობს.
ჩემი საყვარელი გზაა იმაზე დაკვირვება,
-
თუ რა დრო გავიდა და ახალი
სიგანის ამის მიხედვით გამოთვლა.
-
ვიწყებთ საწყისი დროის დამახსოვრებით,
მილიწამებში, ფუნქციის გამოძახებამდე.
-
var startTime = new Date().getTime();
-
makeItBigger-ში მოვათავსებთ მოცემულ დროს.
-
var currTime = new Date().getTime();
-
ვთქვათ, გვინდა 30
პიქსელი-წამში სიჩქარით ზრდა
-
და დაწყება 50 პიქსელით.
-
ახალი სიგანე ტოლი
იყოს 50-ს, საწყის სიგანეს,
-
დამატებული მოცემული
დრო, მინუს საწყისი დრო,
-
მილიწამებში ვართ, ამიტომ ვყოფთ 1000-ზე,
-
შემდეგ კი პლუს 30,
რადგან წამში 30-ით გვინდა გაზრდა.
-
ეს ახალი სიგანეა, ახლა კი
style.width გავუტოლოთ ახალ სიგანეს.
-
გავუტოლოთ newWidth + px-ს.
-
ესეც ასე, სუფთა, 30px/წამი ანიმაცია.
-
შეგვიძლია ეს რიცხვი შევცვალოთ თუ
უფრო ნელა ან სწრაფად გვინდა ზრდა.
-
როგორ შევაჩეროთ
ანიმაცია თუ ის ძალიან დიდი გახდა?
-
შეგვიძლია ეს ხაზი მოვათავსოთ if-ში
-
და შევასრულოთ მხოლოდ
იმ შემთხვევაში, თუ მოცემული სიგანე
-
გარკვეულ რიცხვზე ნაკლები
იქნება, მაგალითად 300.
-
ვნახოთ, თუ გაჩერდება 300-ზე.
-
მშვენიერია!
-
requestAnimationFrame ტექნიკა იმუშავებს,
-
თუ მომხმარებელი იყენებს
Chrome-ს, Firefox-ს, ან IE10+-ს.
-
ჯავასკრიპტის მრავალგვარი
ბიბლიოთეკა არსებობს,
-
რომელიც მოითხოვს requestAnimationFrame-ს
როცა ის მიწვდომადია
-
უფრო ძველ ბრაუზერებში
კი setInterval-ს დაუბრუნდება.
-
web development ყოველთვის იცვლება,
-
ბრაუზერები ახალ თვისებებს ამატებენ,
-
დეველოპერები მათი
გამოყენების ახალ გზებს პოულობენ..
-
ყოველთვის უნდა სწავლობდეთ რა არის ახალი
-
და რა უკეთესი იმისთვის,
რაც თქვენ გინდათ გააკეთოთ.