一天一點JavaScript編程知識:Animation動畫

2020-12-05 碼農登陸

前言

總算是寫完了基礎類型篇的內容。這次咱們來聊一聊動畫。

閒話就不多扯了,直接開始正文。

正文

一、基礎概念

JavaScript中,我們可以依賴內部提供的動畫函數,去移動DOM元素(<img />,<div>或任何其他HTML元素)。

JavaScript提供了以下兩個在動畫中經常使用的函數。

setTimeout(function,duration) - 此函數從現在起持續幾毫秒後調用函數。setInterval(function,duration) - 該函數在每個持續時間毫秒後調用函數。clearTimeout(setTimeout_variable) - 此函數調用清除setTimeout()函數設置的任何計時器。JavaScript還可以設置DOM對象的許多屬性,包括它在屏幕上的位置。我們也可以設置對象的頂部和左側屬性,以將其放置在屏幕上的任何位置:

二、Manual Animation

接下來,讓我們使用DOM對象屬性和JavaScript函數實現一個簡單的動畫,上代碼:

代碼很簡單,這裡簡單解釋一下,當然能看懂的朋友,可以跳過啦:

我們使用JavaScript函數getElementById()來獲取DOM對象,然後將其分配給全局變量imgObj。我們已經定義了一個初始化函數init()來初始化imgObj,我們已經設置了它的位置和左邊的屬性。我們在窗口加載時調用初始化函數。最後,我們調用moveRight()函數將左邊距離增加10個像素。也可以將其設置為負值,將其移動到左側。PS:供複製的代碼,但是請注意,圖片資源需要調整一下

<html> <head> <title>JavaScript Animation</title> <script type = "text/javascript"> var imgObj = null; function init() { imgObj = document.getElementById('myImage'); imgObj.style.position= 'relative'; imgObj.style.left = '0px'; } function moveRight() { imgObj.style.left = parseInt(imgObj.style.left) + 10 + 'px'; } window.onload = init; </script> </head> <body> <form> <img id = "myImage" src = "/images/html.gif" /> <p>Click button below to move the image to right</p> <input type = "button" value = "Click Me" onclick = "moveRight();" /> </form> </body></html>三、Automated Animation

在上面的demo中,我們看到了每次單擊時圖像如何向右移動(PS:運行起來的效果)。

接下來我們使用JavaScript的setTimeout()來自動執行此過程,看代碼:

同樣,簡單的解釋一番(大佬略過~):

所述MoveRight的()函數是調用的setTimeout()函數來設置的位置imgObj。我們添加了一個新函數stop()來清除setTimeout()函數設置的定時器,並將對象設置在其初始位置。PS:供複製的代碼,但是請注意,圖片資源需要調整一下

<html> <head> <title>JavaScript Animation</title> <script type = "text/javascript"> var imgObj = null; var animate ; function init() { imgObj = document.getElementById('myImage'); imgObj.style.position= 'relative'; imgObj.style.left = '0px'; } function moveRight() { imgObj.style.left = parseInt(imgObj.style.left) + 10 + 'px'; animate = setTimeout(moveRight,20); // call moveRight in 20msec } function stop() { clearTimeout(animate); imgObj.style.left = '0px'; } window.onload = init; </script> </head> <body> <form> <img id = "myImage" src = "/images/html.gif" /> <p>Click the buttons below to handle animation</p> <input type = "button" value = "Start" onclick = "moveRight();" /> <input type = "button" value = "Stop" onclick = "stop();" /> </form> </body></html>三、滑鼠滑過

這是一個很常見的效果,就是滑鼠滑入某個元素,然後做動畫。上代碼:

再解釋一波(同樣大佬略過):

在加載此頁面時,「if」語句檢查圖像對象是否存在。如果圖像對象不可用,則不會執行此塊。Image()構造函數創建並預加載稱為新的圖像對象image1的。為src屬性分配名為/images/html.gif的外部圖像文件的名稱。同樣,我們在此對象中創建了image2對象並分配了/images/http.gif。#(哈希標記)禁用連結,以便瀏覽器在單擊時不會嘗試轉到URL。此連結是圖像。所述的onMouseOver當用戶的滑鼠移動到鏈路,而觸發事件處理程序的onMouseOut事件處理程序,當用戶的滑鼠從鏈路(圖像)移開被觸發。當滑鼠在圖像上移動時,圖像從第一個圖像變為第二個圖像。當滑鼠遠離圖像時,將顯示原始圖像。當滑鼠遠離連結時,初始圖像html.gif將重新出現在屏幕上。PS:供複製的代碼,但是請注意,圖片資源需要調整一下

<html> <head> <title>Rollover with a Mouse Events</title> <script type = "text/javascript"> if(document.images) { var image1 = new Image(); // Preload an image image1.src = "/images/html.gif"; var image2 = new Image(); // Preload second image image2.src = "/images/http.gif"; } </script> </head> <body> <p>Move your mouse over the image to see the result</p> <a href = "#" onMouseOver = "document.myImage.src = image2.src;" onMouseOut = "document.myImage.src = image1.src;"> <img name = "myImage" src = "/images/html.gif" /> </a> </body></html>

尾聲

關於動畫篇的內容,到此就結束了。邊翻譯邊總結還真有點強行雜糅到一起的感覺。可能還是自己功力不足吧。

希望以後的文章可以,更絲滑一些,哈哈~

相關焦點

  • 七天學會javascript第一天javascript介紹
    javascript介紹javascript數據類型javascript運算符javascript對象javascript Date對象javascript String對象JavaScript常用於實現一些前端效果。前些年流行的flash已經慢慢的被淘汰,js盛行起來。javascript :客戶端編程。javascript是由客戶端去解釋運行的。
  • 過渡動畫和關鍵幀動畫
    二、CSS3 幀動畫animation幀動畫是通過一幀一幀的畫面按照固定順序和速度播放,如電影膠片。)備註:mymove是給動畫起的名字第二步:用animation調用已制定的動畫的軌跡規則animation複合屬性。
  • JavaScript入門教程
    起源javascript前身叫做livescript,sun公司推出java,netspace公司引進java的概念,重新設計livescript,並更名javascript。發明者,布蘭登.艾克,表單驗證原先要經過伺服器,伺服器壓力大,等待時間長,js僅在客戶端就可完成。是什麼是一種腳本語言,是一種輕量級的程式語言。
  • 【第1162期】2018 要學習的優秀 JavaScript 庫與知識
    為了增強數據的可靠性,我成對的搜索 「軟體」 相關的關鍵字擴大相關性,然後乘以大約 1.5 (粗糙的區分那些編程工作列表使用 「軟體」 關鍵字和不使用的)。所有相關的都按日期排序記錄相關性,其結果不一定 100% 準確,但是已經足夠用來在此文中表示粗略的度。
  • 在JavaScript中,使用replace()、test()和exec()方法匹配字符串
    JavaScript核心代碼如下:<script type="text/javascript">var str = "Hello Microsoft!"使用字符串替換的核心JavaScript代碼如下:<script type="text/javascript">var str = "一都編程,每個知識就是一個案例。"
  • QQ & PUPU 動畫設定
    動畫被做成20秒左右以適應手機等智能設備,我們試著將暗指了角色特徵的有趣故事包含在這短短的時間裡。SpaceQQ and PUPU appeared together through the QQ 20th anniversary event.
  • 在JavaScript字符串的search()方法中,如何匹配正則表達式?
    第一節:基本概念#JavaScript#正則表達式已經成為各大程式語言的標準,只是在不同的語言中,所使用的方式有所不同,但基本上核心的功能都是一樣的。正則表達式的核心功能是建立一種匹配模式,這個匹配模式可以理解為模板,模子。然後再拿具體的字符串來與這個模式進行匹配,如果匹配上,則表示符合要求,則進一步採用措施。
  • javascript在自動化測試項目中的應用「軟體測試開發入門教程」
    比如說我今天分享的主題是javascript在自動化測試中的應用有些朋友說我之前講的自動化測試的東西,需要消化很久,有一定的難度,意思就是說我動不動就講測試框架,測試開發是不是會有這樣的感覺?比如今天分享的javascript,大家做軟體測試有沒有用過?
  • JavaScript - Math對象
    中其實是有很多數學計算的需求的,不過不必擔心系統給我們提供了大量的數學運算的方法供我們使用而這些方法全都存在於我們的Math對象中Math常用的屬性:Math.PI 相當於π 3.14159Math對象常用的函數:1.Math.round() 四捨五入舉個小例子:<script type = 「text/javascript
  • 國漫大電影碰撞少兒編程,核桃編程推出《未來機器城》主題課程
    炎炎夏日,又到了一年一度的暑期檔,首部由暴走漫畫劇本改編的《未來機器城》成為了這個暑假最受期待的動畫電影之一,馮遠徵和石班瑜加盟為電影主要角色配音。據悉該片以破紀錄的高價被全球流媒體巨頭Netflix買下海外發行權,同時入圍被譽為「動畫奧斯卡」的安妮獎三項提名,還包攬了兒童奧斯卡「2018kidscreen awards」的最佳動畫片、最佳設計兩項大獎。影片還未上映,就受到了中國小影迷們的熱切期盼。特別值得關注的是,少兒編程教育行業領導者核桃編程將電影中IP人物還原至線上課程,動畫中主要人物將在編程課程中陪伴孩子度過一個非比尋常的暑假。
  • 用Python動畫來展示二階貝賽爾曲線
    圖5.接著從變量art1開始就是繪製動畫的部分了。這部分比較複雜,一共有art1、art2、art3和art4這四個變量,其分別對應線段AB、BC、DE和目標曲線的移動軌跡,點在這四個軌跡上移動,才能形成動畫。
  • 獲500萬天使輪融資,帕拉卡獨創3D動畫與編程創作平臺
    億歐教育6月19日消息,少兒3D動畫編程創作平臺帕拉卡 據悉,帕拉卡(Paracraft)為一個3D動畫編程創作工具,由原上市公司大富科技旗下子公司-深圳市大富網絡技術有限公司孵化,是國內首個集3D建模、動畫、編程、機器人設計、仿真、製造、分享、營銷於一體的創造平臺,可以為STEAM教育提供了最創造工具、在線平臺、教學和經營模式。
  • 第五篇:JavaScript事件處理
    庫的網頁代碼(案例代碼見unit12\case1.html):<html><head><title>JavaScript開發案例</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><script type="text/javascript
  • 「白玉蘭」獎國際評委—動畫片組 山崎立士
    山崎立士  日本著名動畫製片人  1988年製作《齊天烈大百科》開始出道、之後擔任知名動畫片《烏龍派出所》、《網球王子》的製片人,現任《多拉A夢》總製片人。  YAMAZAKI Tatsuji is a famous animation producer of NAS, Japan.
  • 廈門、武漢中小學開啟人工智慧教育試點,逐步推廣編程教育
    Scratch基礎:編程+學科融合,沉浸式動畫闖關學編程 貝爾編程的Scratch圖形化編程課,將課程進行本土化IP改造,教學引入中國經典《西遊記》的人物形象,通過編程、動畫、Puzzle闖關系統相結合的形式,打造劇情動畫式探索場景,讓孩子們在「沉浸式」趣味學習中掌握編程知識。
  • 學編程哪個網校好一點
    教育的核心不只是傳授知識,而是學會做人。習慣是一個人存放在神經系統的資本,一個人養成好的習慣,一輩子都用不完它的利息;中國青少年研究中心的專家孫雲曉指出:「習慣決定孩子的命運。習慣的力量是巨大的,人一旦養成一個習慣,就會不自覺地在這個軌道上運行,如果是好習慣,將會終身受益,這對於6-16歲學習少兒編程的孩子來講也同樣適用。要讓孩子喜歡上編程可以利用孩子的好奇心,培養學習興趣。
  • 代碼中的編程少年
    有了編程的知識基礎,姚斯盛從遊戲玩者的角色跳出來,萌生了新的想法,「為什麼不自己做一款飛機大戰的遊戲呢?」  姚斯盛對「飛機大戰」有自己的想法:原先的版本是黑白的,他要賦予遊戲色彩;飛機的「必殺技」是全屏爆炸,他要改成了雷射從底屏向上蔓延……他在遊戲揮灑著想像力。  當然,讓他最為得意的還是參加培訓機構舉辦的Scratch全國大賽。
  • python學習筆記:兩個變量之間的互相關圖形和簡單動畫曲線
    1.簡單動畫曲線(下圖實際上應該是動態圖)import numpy as npfrom matplotlib import pyplot as plt#導入animation創建動畫from matplotlib import animation
  • 編程能考級了!最新樣題出爐
    :能夠使用圖形化編程環境創作包含單場景、少角色的簡單動畫。示例:設計一個春夏秋冬四季多種農作物生長的動畫,動畫內容:在每個季節場景中不同農作物的生長狀況也不一樣,例如在夏季,小麥豐收,玉米播種,辣椒生長等。