本文目錄一覽:
如何使用js捕獲css3動畫
CSS Animation Store
這個主意是通過一個簡單的接口來訪問CSS動畫,實際上之前的Morf.js和CSSA中都有這樣的處理,大部分代碼已經有了,只需要整整,按照Chris所建議的接口風格寫下來
從GitHub下載CSS Animation Store
下面是CSS Animation Store的基本接口(關於代碼如何工作的信息),將代碼放在標籤之前,會創建一個全局的對象 CSSAnimations,這個對象包含所有當前可以使用的CSS動畫
比如,獲取名稱為」spin」的動畫,你可以按下面的代碼:
var spin = CSSAnimations.spin;
參數spin是一個KeyframeAnimation實例,有下面的屬性和函數:
keyframes – KeyframeRule 集合
original – 原始對象 WebKitCSSKeyframesRule 或者MozCSSKeyframesRule 類型
getKeyframeTexts() – 返回所有keyframe文本集合, e.g. [『0%』, 『50%』, 『100%』]
getKeyframe(text) – 返回指定文字的 KeyframeRule 對象, e.g. getKeyframe(『0%』)
setKeyframe(text, css) – 設置新的CSS, e.g.setKeyframe(『10%』, {background: 『red』, 『font-size’: 『2em』})
可以看出,KeyframeRule提供了一些方法和函數,是對 WebKitCSSKeyframeRule 和MozCSSKeyframeRule (注意是frame不是frames)的封裝,具有下面的屬性和方法
css – 該keyframe的css內容, e.g. {background: 『red』, 『font-size’: 『2em』}
keyText – 該幀的名稱, e.g. 10%
original – 原始對象 WebKitCSSKeyframeRule 或者MozCSSKeyframeRule
示例
獲取動畫中的所有幀
var spin = CSSAnimations.spin;
for(var i=0; ispin.keyframes.length; i++)
console.log(spin.keyframes[i].css);
修改動畫中的某一幀
var spin = CSSAnimations.spin;
spin.setKeyframe(‘10%’, {background: ‘red’, ‘font-size’: ‘2em’});
反饋
給我博客或者GitHub留言,讓我知道你的想法,我還開放了修改和增加的權限
使用原生JavaScript訪問和創建CSS動畫
如果你不想使用CSS Animation Store,或者只是想知道它的實現原理,可以參看下面的介紹
訪問CSS動畫
可以通過CSSOM訪問keyframe動畫,下面是我CSSA中的代碼,用於訪問指定的CSS動畫
JS 怎麼動態設置CSS3動畫的樣式
引入jquery
然後給你要設置動畫的對象增加或者刪除css3動畫的類就可以了。
如我這裡用colorchange這個漸變類在css裏面寫好動畫效果以後在js裏面給對象添加上就可以實現動畫了
!DOCTYPE html
html
head lang=”en”
meta charset=”UTF-8″
titleTest/title
style type=”text/css”
body{
padding: 20px;
background-color:#FFF;
}
.colorchange
{
animation:myfirst 5s;
-moz-animation:myfirst 5s; /* Firefox */
-webkit-animation:myfirst 5s; /* Safari and Chrome */
-o-animation:myfirst 5s; /* Opera */
}
@keyframes myfirst
{
from {background:red;}
to {background:yellow;}
}
@-moz-keyframes myfirst /* Firefox */
{
from {background:red;}
to {background:yellow;}
}
@-webkit-keyframes myfirst /* Safari and Chrome */
{
from {background:red;}
to {background:yellow;}
}
@-o-keyframes myfirst /* Opera */
{
from {background:red;}
to {background:yellow;}
}
#main{
width:100px;
height:100px;
background:red;
}
#cgbt{
width: 100px;
margin: 20px 0 0 0;
text-align: center;
cursor: pointer;
}
#cgbt:hover{
background-color: #2D93CA;
}
/style
/head
body
div id=”main”
我會變么?
/div
div id=”cgbt”
點我讓上面的變顏色
/div
script src=”jquery-3.2.1.min.js” type=”application/javascript”/script
script
$(document).ready(function(){
$(“#cgbt”).click(function(){
$(“#main”).attr(“class”,”colorchange”);
});
});
/script
/body
/html
怎麼用js觸發css3動畫
你用CSS3的方式預先寫好動畫樣式,不調用這個class,前端中設置鼠標經過增加一個class,這樣鼠標指向的時候就有CSS3的動畫,鼠標離開去除樣式動畫結束
如何用JS和CSS3製作炫酷的彈窗效果
首先回憶一下彈窗的實現,一般我們分為兩層,彈出窗口層(popus)和遮罩層(mask),通常情況下我習慣就這兩元素全部設成fixed定位,具體和absolute區別一試便知。對於mask層自不用多少,我們如下給他設置屬性,讓他鋪滿整個屏幕。
.mask{position:fixed;top:0px;bottom:0px;left:0px;right:0px;background-color:#000;opacity:0.6;filter:alpha(opacity=60)}
popus層則要稍微麻煩點兒,這裡我們有兩種實現方法
1.已知大小的彈窗,如下,主要通過top,left與負的margin來實現。
.popus{width:300px;height:200px;position:fixed;left:50%;top:50%;margin-left:-150px;margin-top:-100px;background-color:#000}
2.未知彈窗大小,則通過js獲取彈窗層的width與height,然後在進行如上設置,在此不多述。
3.在支持css3的情況下,我們不需要知道彈窗的寬高,便可進行如下設置
.popus{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%)}
主要通過translate屬性來設置,偏移的值百分比是相對於本身的寬高,因此從原理上來說跟第一種寫法有異曲同工之妙,不過使用卻更方便。
言歸正傳,下面我們回歸到正題,即讓元素實現ps中高斯模糊的效果。
這裡引出一個css屬性:filter,注意這裡的filter並不是ie中的filter,filter有很多值,感興趣的可以點擊這裡,作者講的非常詳細。我們今天只講其中的一個blur,首先看下面的預覽圖
ps:目前來說該屬性只支持webkit瀏覽器,所以我們直接使用了css3屬性,效果也需要在webkit瀏覽器中查看
是不是很神奇,其中起作用的代碼就這一行 -webkit-filter:blur(8px) ,後面的像素值即代表模糊程度,當然在日常項目中,我們還可以加一些動畫,使頁面更加的生動,本案例完整代碼如下:
div class=’bg’
img src=’bg.jpg’ /
/div
div class=’popus’
效果是不是要好過純色加透明呢
div
div class=’left btn ‘確實不錯/div
div class=’right btn’也就那樣/div
/div
/div
css:
*{padding:0px;margin:0px}
img{width:100%;margin:0px auto;display:block}
.bg.blur{-webkit-filter:blur(8px)}
.popus{width:400px;color:#000;;position:fixed;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);font-family:”微軟雅黑”;padding:20px 0px;font-weight:bold;background-color:rgba(255,255,255,0.6);border-radius:18px;text-align:center;padding:30px 0px;box-shadow:0px 0px 10px rgba(0,0,0,0.4);display:none}
.popus div{width:220px;margin:10px auto}
.popus div.btn{width:80px;padding:5px 10px;color:#000}
.left{float:left;border:1px solid #000}
.popus div.btn.right{float:right;color:#666}
js:
$(‘.bg’).on(‘click’,function(){
console.log(98)
$(this).addClass(‘blur’);
$(‘.popus’).show();
})
$(‘.btn’).on(‘click’,function(){
$(‘.bg’).removeClass(‘blur’);
$(‘.popus’).hide();
})
這樣是不是就完了?很明顯不是,看控制台
當我們彈出窗口外,肯定要禁止掉我們其他層的點擊事件,但是我們發現目前我們雖然將其他層模糊化了,但是並沒有禁止掉相應的事件,當然解決辦法也很簡單,我們可以加一層沒有背景顏色的遮罩層,覆蓋在頁面上,這樣我們每次點擊作用在遮罩層上,自然不會觸發底層的事件了。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/186509.html