成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

js 和 css動(dòng)畫

qianfeng / 2212人閱讀

摘要:和動(dòng)畫使用或者使用這兩個(gè)函數(shù)定時(shí)調(diào)用一段代碼。腳本化樣式表開啟和關(guān)閉樣式表和元素的對(duì)象定義了一個(gè)在中可以設(shè)置和查詢的屬性。

js和css動(dòng)畫

使用setTimeout()或者setInterval()使用這兩個(gè)函數(shù)定時(shí)調(diào)用一段代碼。這是其原理。

目的,重復(fù)修改內(nèi)聯(lián)樣式,達(dá)到動(dòng)畫的效果

通過在相同的時(shí)間內(nèi)構(gòu)造出一幀幀的內(nèi)容,然后讓其在函數(shù)的作用下不斷的改變css的值,達(dá)到動(dòng)畫的效果

js寫css動(dòng)畫
// 將e轉(zhuǎn)化為相對(duì)定位的元素,使得其可以左右移動(dòng)
// 第一個(gè)參數(shù)為元素對(duì)象或者元素的id
// 如果第二個(gè)參數(shù)是函數(shù),以e為參數(shù),它將在動(dòng)畫結(jié)束時(shí)調(diào)用
// 第三個(gè)參數(shù)指定e移動(dòng)的距離,默認(rèn)為5像素
// 第四個(gè)參數(shù)指定移動(dòng)多久,默認(rèn)500毫秒
function shake(e, oncomplete, distance, time) {
    // 句柄函數(shù)
    if (typeof e === "string") e = document.getElemnentById(e);    // 如果傳入的是對(duì)象的id則獲取對(duì)象的id,如果傳入的為元素(元素為對(duì)象)則直接跳過這一句
    if (!time) time = 500;    // 如果time是空值,則直接使用默認(rèn)值
    if (!distance) distance = 5;    // 如果未指定移動(dòng)的距離,則默認(rèn)為5像素

    var originalStyle = e.style.cssText;    // 獲取元素e的css樣式
    e.style.position = "relative";    // 設(shè)置為相對(duì)定位
    var start = (new Date()).getTime();    // 設(shè)置動(dòng)畫開始的時(shí)間,獲取一個(gè)格林威治時(shí)間
    animate();    // 動(dòng)畫開始

    // 函數(shù)檢查消耗時(shí)間,并更新e的位置
    // 如果動(dòng)畫完成,它將e還原為原始狀態(tài)
    // 否則,將會(huì)更新e的位置,安排其自身重新運(yùn)行
    function animate() {
        var now = (new Date()).getTime();    // 獲取現(xiàn)在的時(shí)間
        var elapsed = now-start;    // 從開始以來消耗了多長(zhǎng)時(shí)間
        var fraction = elapsed / time;    // 為總時(shí)間的幾分之幾

        if (fraction < 1) {    // 如果動(dòng)畫未完成
            // 作為動(dòng)畫完成比例的函數(shù),計(jì)算e的x位置
            // 使用正弦函數(shù)將完成比例乘以4pi
            // 所以,它將來回往返兩次
            var x = distance * Math.sin(fraction * 4 * Math.PI);     // 使用正弦函數(shù)實(shí)現(xiàn)每秒四幀
            e.style.left = x + "px";

            // 在25毫秒后或在總時(shí)間的最后嘗試再次運(yùn)行函數(shù)
            // 目的是為了產(chǎn)生每秒40幀動(dòng)畫
            setTimeout(animate, Math.min(25, time-elapsed));    // 使用天花板函數(shù)再次調(diào)用,再次移動(dòng)
        }
        else {    // 否則動(dòng)畫完成
            e.style.cssText = originalStyle; // 恢復(fù)原始樣式
            if (oncomplete) oncomplete(e);    // 產(chǎn)生一個(gè)回調(diào)函數(shù)
        }
    }
}

// 以毫秒級(jí)的時(shí)間將e從完全不透明淡出到完全透明
// 在調(diào)用函數(shù)時(shí)假設(shè)e是完全不透明的
// oncomplete 是一個(gè)可選函數(shù),以e為參數(shù),它將在動(dòng)畫結(jié)束的時(shí)調(diào)用
// 如果不指定time,默認(rèn)為500毫秒
function fadeOut(e, oncomplete, time) {
    if (typeof e === "string") e = document.getElementById(e);
    if (!time) time = 500;

    // 使用Math.sqrt作為一個(gè)緩動(dòng)函數(shù)創(chuàng)建動(dòng)畫
    // 非線性函數(shù),一開始淡出的較快,然后逐步的緩慢
    var ease = Math.sqrt;

    var start = (new Date()).getTime();    // 動(dòng)畫開始的時(shí)間
    animate();    // 動(dòng)畫開始

    function animate() {
        var elapsed = (new Date()).getTime()-start;    // 消耗的時(shí)間
        var fraction = elapsed/time;    // 總時(shí)間的幾分之幾

        if (fraction < 1) {    // 如果動(dòng)畫未完成
            var opacity = 1 - ease(fraction);    // 計(jì)算不透明度  即 完成一次變換,開方
            e.style.opacity = String(opacity);    // 設(shè)置透明度
            setTimeout(animate, // 進(jìn)行下一幀
                Math.min(25, time-elapsed));    // 在25毫秒之后或者在總時(shí)間的最后再次調(diào)用
        }else {
            e.style.opacity = "0";    // 使得e完全透明
            if (oncomplete) oncomplete(e);    // 在結(jié)束的時(shí)候回調(diào)
        }
    }
}
查詢計(jì)算出的樣式
getComputedStyle(e)

275個(gè)樣式。。。O__O "…

腳本化css類

除了能腳本化內(nèi)聯(lián)樣式,同樣的也能腳本化css的類

移除,添加類
e.className = "attention";  // 添加類
e.className = "";   // 移除類
顯示類列表

classList
只讀屬性,返回元素類屬性的實(shí)時(shí)集合。

e.classList()
腳本化樣式表 開啟和關(guān)閉樣式表

style和link元素的CSSStyleSheet對(duì)象定義了一個(gè)在js中可以設(shè)置和查詢的disabled屬性。

關(guān)于disabled屬性,該屬性在HTML中不屬于規(guī)范的一部分,在HTML中不存在,但是,在DOM中存在該屬性。在標(biāo)簽中無法設(shè)置該屬性,但是可以在腳本中設(shè)置該屬性

如果值為true,樣式表關(guān)閉,否則樣式表打開

e.disabled = true;

這樣樣式表即可關(guān)閉。

類似的通過以下方式也可

document.styleSheets[0].disabled;
查詢,插入與刪除樣式表規(guī)則

CSSStyleSheet對(duì)象同樣也定義了用來查詢,插入和刪除樣式表規(guī)則的api

查詢所有樣式表內(nèi)容
var firstRule = document.styleSheets[0].cssRules[0];
document.styleSheets[0] 一個(gè)只讀屬性,返回一個(gè)該文檔的鏈接或嵌入的樣式表

該樣式只讀,不可進(jìn)行插入和刪除

其中selectorText為css選擇器
cssText 為css的文本樣式

添加和刪除規(guī)則

insertRule()和deleteRule()這兩種方法,達(dá)到添加和刪除規(guī)則
還有一個(gè)addRule()方法

insertRule()方法

insertRule()和deleteRule()這兩種方法,達(dá)到添加和刪除規(guī)則

ss.insertRule(".name {color:blue}", 0);

在ss樣式表中,在第0條cssRules中添加一條css規(guī)則。使得類為name的字體變藍(lán)
如果添加的索引已經(jīng)存在則不會(huì)覆蓋,所有的索引加1,然后進(jìn)行插入

deleteRule()方法

刪除樣式規(guī)則
刪除上一條插入的樣式

ss.deleteRule(0);

刪除第0條規(guī)則,樣式繼續(xù)保持從0開始

創(chuàng)建新的樣式表

這個(gè)不難,直接插入一個(gè)新的style元素通過innerHTML的方式將其插入新的css內(nèi)容,或者直接插入link標(biāo)簽,設(shè)置添加一個(gè)html的屬性使用的是 Element.setAttritube()方法,將rel的值設(shè)置為stylesheet 然后在用同樣的方法添加src屬性

純粹的dom 和 bom的操作,不涉及任何樣式表的內(nèi)容

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/113714.html

相關(guān)文章

  • 可能是最全的前端動(dòng)效庫匯總

    摘要:非常的龐大,而且它是完全為設(shè)計(jì)而生的動(dòng)效庫。它運(yùn)行于純粹的之上,是目前最強(qiáng)健的動(dòng)畫資源庫之一??赡苁莿?chuàng)建滾動(dòng)特效最好用的工具,它支持大量的瀏覽器,只要它們支持和特性??梢酝ㄟ^安裝吊炸天了,接近現(xiàn)實(shí)生活中的物理運(yùn)動(dòng)碰撞慣性動(dòng)畫庫。 收集日期為2019-02-28,★代表當(dāng)時(shí)的該項(xiàng)目在github的star數(shù)量 Animate.css 56401 ★ 一個(gè)跨瀏覽器的動(dòng)效基礎(chǔ)庫,是許多基礎(chǔ)動(dòng)...

    afishhhhh 評(píng)論0 收藏0
  • JavaScript是如何工作的: CSS JS 動(dòng)畫底層原理及如何優(yōu)化它們的性能

    摘要:貝塞爾曲線貝塞爾曲線是應(yīng)用于二維圖形應(yīng)用程序的數(shù)學(xué)曲線。通過調(diào)整控制點(diǎn),貝塞爾曲線的形狀會(huì)發(fā)生變化。讓我們看看貝塞爾曲線的工作原理。貝塞爾曲線需要四個(gè)值,或者更準(zhǔn)確地說它需要兩對(duì)數(shù)字。每對(duì)描述立方貝塞爾曲線控制點(diǎn)的和坐標(biāo)。 這是專門探索 JavaScript 及其所構(gòu)建的組件的系列文章的第 13 篇。 如果你錯(cuò)過了前面的章節(jié),可以在這里找到它們: JavaScript 是如何工作的:...

    darcrand 評(píng)論0 收藏0
  • 使用Move.js創(chuàng)建CSS3動(dòng)畫

    摘要:是使用簡(jiǎn)單函數(shù)創(chuàng)建動(dòng)畫的一個(gè)簡(jiǎn)單的庫?;A(chǔ)知識(shí)提供了創(chuàng)建動(dòng)畫的最簡(jiǎn)單的。他用于分割動(dòng)畫為兩個(gè)集合,并按順序執(zhí)行。如下動(dòng)畫被分為兩步,通過方法實(shí)現(xiàn)分割使用創(chuàng)建復(fù)雜動(dòng)畫在本教程中,我們已經(jīng)寫了很多基本的動(dòng)畫來了解各個(gè)方法。 原文鏈接,請(qǐng)移步creating-css-animations-using-move-js 第一次翻譯,如有誤解,請(qǐng)移步原文 在網(wǎng)站上,CSS3 的過渡和動(dòng)畫是當(dāng)前...

    MASAILA 評(píng)論0 收藏0
  • 前端動(dòng)畫調(diào)研-V1

    摘要:支持動(dòng)畫狀態(tài)的,在動(dòng)畫開始,執(zhí)行中,結(jié)束時(shí)提供回調(diào)函數(shù)支持動(dòng)畫可以自定義貝塞爾曲線任何包含數(shù)值的屬性都可以設(shè)置動(dòng)畫倉庫文檔演示功能介紹一定程度上,也是一個(gè)動(dòng)畫庫,適用所有的屬性,并且實(shí)現(xiàn)的能更方便的實(shí)現(xiàn)幀動(dòng)畫,替代復(fù)雜的定義方式。 動(dòng)畫調(diào)研-V1 前言:動(dòng)畫從用途上可以分為兩種,一種是展示型的動(dòng)畫,類似于一張GIF圖,或者一段視頻,另一種就是交互性的動(dòng)畫。這兩種都有具體的應(yīng)用場(chǎng)景,比如...

    ddongjian0000 評(píng)論0 收藏0
  • [練習(xí)]利用CSS steps 實(shí)現(xiàn)逐幀動(dòng)畫

    摘要:網(wǎng)頁逐幀動(dòng)畫的實(shí)現(xiàn)方式網(wǎng)頁中的逐幀動(dòng)畫,大致可分為兩大類的實(shí)現(xiàn)方式,分別是使用控制,和單純使用實(shí)現(xiàn),兩者的優(yōu)劣總體概括來說就是動(dòng)畫可控性更強(qiáng),但開銷大,實(shí)現(xiàn)復(fù)雜。 網(wǎng)頁逐幀動(dòng)畫的實(shí)現(xiàn)方式 網(wǎng)頁中的逐幀動(dòng)畫,大致可分為兩大類的實(shí)現(xiàn)方式, 分別是使用JS控制,和單純使用CSS實(shí)現(xiàn),兩者的優(yōu)劣總體概括來說就是: JS動(dòng)畫可控性更強(qiáng),但開銷大,實(shí)現(xiàn)復(fù)雜。 CSS動(dòng)畫實(shí)現(xiàn)相對(duì)JS更簡(jiǎn)單。常見的網(wǎng)...

    RiverLi 評(píng)論0 收藏0
  • 11 個(gè)最好的 JavaScript 動(dòng)態(tài)效果庫

    摘要:經(jīng)過一番研究,我收集了個(gè)最好的庫,你可以用在自己的項(xiàng)目中。該庫于年月首次推出,目前仍有近名參與者開發(fā)。超過的,是一個(gè)動(dòng)畫庫,可以處理屬性單個(gè)轉(zhuǎn)換或任何屬性,以及對(duì)象。對(duì)智能設(shè)備的方向作出反應(yīng)的視差引擎快速創(chuàng)建漂亮的動(dòng)畫。 翻譯:瘋狂的技術(shù)宅原文:https://blog.bitsrc.io/11-jav... 當(dāng)我想要在網(wǎng)上找一個(gè)簡(jiǎn)潔的 Javascript 動(dòng)效庫時(shí),總是發(fā)現(xiàn)很多推...

    wawor4827 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<