原生js實現簡單動畫效果

2021-10-05 01:30:47 字數 3853 閱讀 5801

實現動畫效果可以用jquery提供的animate方法,或一些外掛程式來實現,但是隨著前端元件化開發的流行,

jquery大量的dom操作已經顯得十分多餘,正在逐漸從前端技術棧中被淘汰,下面我們使用原生js實現簡單的勻速動畫效果和緩動效果

勻速動畫實現水平移動

css樣式

#box 

.line400

.line800

<

/style>

html結構和js**

"box"

>

<

/div>

="line400"

>

<

/div>

="line800"

>

<

/div>

"button" value=

"右移400" id=

"r1"

>

"button" value=

"右移800" id=

"r2"

>

var box = document.

getelementbyid

("box");

var box2 = document.

getelementbyid

("box2");

var btnr1 = document.

getelementbyid

("r1");

var btnr2 = document.

getelementbyid

("r2");

btnr1.onclick =

function()

; btnr2.onclick =

function()

;// 封裝動畫函式

function

animation

(ele, target)},

50)}<

/script>

<

/body>

效果

緩速運動 : 每次移動的距離 = (目標位置 - 當前位置) / 10

特點:沒有誤差,準確到達目標位置後期接近目標都是1px移動 不會有誤差,但還需要清除定時器 終點檢測

還是上面的樣式結構

js**

"box"

>

<

/div>

="line400"

>

<

/div>

="line800"

>

<

/div>

"button" value=

"緩速移動400" id=

"r1"

>

"button" value=

"緩速移動800" id=

"r2"

>

var box = document.

getelementbyid

("box");

var btn1 = document.

getelementbyid

("r1");

var btn2 = document.

getelementbyid

("r2");

btn1.onclick =

function()

btn2.onclick =

function()

// 緩動距離方法

function

slowmove

(ele, target)},

10)}<

/script>

<

/body>

效果:

以上動畫方法只能實現簡單的屬性(帶px單位)動畫

要實現其他屬性的動畫要先了解乙個獲取屬性的方法

getcomputedstyle() : 獲取元素所有樣式 全域性方法(ie8不支援)

引數1: 要獲採樣式的物件

引數2: 偽元素 ,一般不傳 預設為null

返回值: 樣式物件

特點:1.可以獲取行內樣式,也可以獲取行外樣式

2.獲取的是string型別 帶單位

3.獲取的元素唯讀,不可修改

ie8使用currentstyle屬性

這裡做一下相容

// 獲取元素屬性的ie8相容

/** @param ele 需要查詢的元素

@param attr 需要獲取到的屬性 string型別

*/function

getelestyle

(ele,attr)

else

}

實現多屬性緩動效果封裝函式

<

!doctype html>

"en"

>

"utf-8"

>

"viewport" content=

"width=device-width, initial-scale=1.0"

>

"x-ua-compatible" content=

"ie=edge"

>

document<

/title>

#box

#box1

<

/style>

<

/head>

"box"

>

<

/div>

"box1"

>

<

/div>

"button" value=

"緩速移動屬性" id=

"r2"

>

"animation.js"

>

<

/script>

var box = document.

getelementbyid

("box");

var btn1 = document.

getelementbyid

("r1");

var btn2 = document.

getelementbyid

("r2");

btn2.onclick =

function()

,function()

,function()

,function()

,function()

)})}

)})}

);}// 緩動屬性方法

function

slowmove

(obj, attrs, callback)

else

if(attr ==

"opacity")}

else}}

// 當所有屬性都到達終點時再清除定時器

if(isall)

,1000)}

}},10

)}// 獲取元素屬性的ie8相容

/** @param ele 需要查詢的元素

@param attr 需要獲取到的屬性 string型別

*/function

getelestyle

(ele, attr)

else

}<

/script>

<

/body>

<

/html>

原生JS實現彈幕效果

純屬無聊寫的,可能有很多問題,歡迎批評指教。效果圖 圖一是預設的一些彈幕,圖二是自己發射的彈幕,效果是一樣的。demo位址 首先是彈幕的位置,是要從最右滑到最左,為了防止隨機高度彈幕會覆蓋的問題,設定了通道。每乙個通道是從左到右的一條,高度固定,這樣不同通道的彈幕不會相互覆蓋。彈幕滑動就是簡單設定c...

Javascript原生動畫效果的實現

js框架越來越多,也越來越好用,如果了解了原生的js動畫的實現方式,能更好的有助於理解js框架。這裡介紹一種計時器。setinterval code,ms 週期性的執行一段 前乙個引數是週期執行的 後乙個是迴圈的週期,單位毫秒。clearinterval 清除計時器。利用計時器的迴圈,對元素的樣式進...

前端 原生js實現粒子效果

效果截圖 實現原始碼 doctype html content type content text html charset utf 8 demo title head overflow hidden background 000 container canvas var canvas docume...