css3實現圓形載入動畫的js外掛
這個是本人寫的一個小外掛,實現的功能也很有限,就是能夠使用圓形載入的效果。
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
#circle{
left:45%;
top:200px;
}
</style>
</head>
<body>
<div id="circle">
</div>
</body>
<script>
function Loading(setting) {
this.settings ={
animationTime:2,//動畫執行時間
divId:null,//div盒子的idClass
divWidth:"20px",//盒子的寬度
divHeight:"20px", // 盒子的高度
divLoadClassName: "spinner", //新增class名字後就會執行載入動畫
divClass:"wrap-box",//兩個盒子外面的盒子class
leftWrapDivName:"leftWrap-box", //第一個盒子的class名字
leftDivName:"left-box", //第一個盒子的class名字
rightWrapDivName:"rightWrap-box", //內部第二個盒子的class名字
rightDivName:"right-box", //內部第二個盒子的class名字
infinite:true, // 是否迴圈
loadingWidth:"1px", //圓圈寬度
loadingColor:"#30aee0" //圓圈的顏色
};
this.timeOut = null; //延遲器
if(setting){
for(var i in setting){
this.settings[i] = setting[i];
}
}
this.prefix = function () {
var div = document.createElement('div');
var cssText = '-webkit-transition:all .1s; -moz-transition:all .1s; -o-transition:all .1s; -ms-transition:all .1s; transition:all .1s;';
div.style.cssText = cssText;
var style = div.style;
if (style.webkitTransition) {
return '-webkit-';
}
if (style.MozTransition) {
return '-moz-';
}
if (style.oTransition) {
return '-o-';
}
if (style.msTransition) {
return '-ms-';
}
return '';
};
this.runOne = function (callback) {
var that = this;
//呼叫執行一次
this.div.classList.add(this.settings.divLoadClassName);
this.timeOut = setTimeout(function () {
that.div.classList.remove(that.settings.divLoadClassName);
callback.call(that.div,that.div);
},+that.settings.animationTime*1000);
};
this.runForever = function () {
this.div.classList.add(this.settings.divLoadClassName);
};
this.remove = function () {
this.leftWrap.parentNode.removeChild(this.leftWrap);
this.rightWrap.parentNode.removeChild(this.rightWrap);
this.style.parentNode.removeChild(this.style);
};
if(typeof(this.settings.divId) == "object"){
var div = this.div = this.settings.divId;
this.settings.divId = this.div.id;
}else{
var div = this.div = document.getElementById(this.settings.divId);
}
div.style.cssText = "border-radius:50%; width:"+this.settings.divWidth+"; height:"+this.settings.divHeight+";";
if(!div.style.position){
div.style.position = "absolute";
}
var leftWrap = this.leftWrap = document.createElement("div");
leftWrap.className = this.settings.divClass+" "+this.settings.leftWrapDivName;
var rightWrap = this.rightWrap = document.createElement("div");
rightWrap.className = this.settings.divClass+" "+this.settings.rightWrapDivName;
var left = document.createElement("div");
left.className = this.settings.leftDivName;
var right = document.createElement("div");
right.className = this.settings.rightDivName;
var style = this.style = document.createElement("style");
leftWrap.appendChild(left);
rightWrap.appendChild(right);
div.appendChild(leftWrap);
div.appendChild(rightWrap);
style.innerText = "" +
"@"+this.prefix()+"keyframes left-animation {" +
" 0%{transform: rotate(135deg);}" +
" 50%{transform: rotate(135deg);}" +
" 100%{transform: rotate(315deg);}" +
"}\n" +
"@"+this.prefix()+"keyframes right-animation {" +
" 0%{transform: rotate(-45deg);}" +
" 50%{transform: rotate(135deg);}" +
" 100%{transform: rotate(135deg);}" +
"}\n" +
"#"+this.settings.divId+" ."+this.settings.divClass+"{" +
" position:absolute; top:0; width:"+div.offsetWidth/2+"px; height:"+div.offsetHeight+"px; overflow:hidden;" +
"}\n" +
"#"+this.settings.divId+" ."+this.settings.rightWrapDivName+"{" +
" right:0;" +
"}\n" +
"#"+this.settings.divId+" ."+this.settings.leftWrapDivName+"{" +
" left:0;" +
"}\n" +
"#"+this.settings.divId+":after{" +
" content:''; display:block; height:4px; width:4px; position:absolute; top:50%; left:50%; margin-top:-2px; margin-left:-2px; background:"+this.settings.loadingColor+"; border-radius:50%;" +
"}\n" +
"#"+this.settings.divId+" ."+this.settings.leftDivName+",#"+this.settings.divId+" ."+this.settings.rightDivName+"{" +
" border-left:"+this.settings.loadingWidth+" solid "+this.settings.loadingColor+";" +
" border-top:"+this.settings.loadingWidth+" solid "+this.settings.loadingColor+";" +
" border-right:"+this.settings.loadingWidth+" solid transparent;" +
" border-bottom:"+this.settings.loadingWidth+" solid transparent;" +
" position:absolute;" +
" top:0;" +
" width:"+div.offsetWidth+"px;" +
" height:100%;" +
" border-radius:50%;" +
" box-sizing:border-box;" +
"}\n" +
"#"+this.settings.divId+" ."+this.settings.leftDivName+"{" +
" transform: rotate(135deg); left:0;" +
"}\n"+
"#"+this.settings.divId+" ."+this.settings.rightDivName+"{" +
" transform: rotate(-45deg); right:0;" +
"}\n"+
"#"+this.settings.divId+"."+this.settings.divLoadClassName+" ."+this.settings.leftDivName+"{" +
" "+this.prefix()+"animation: left-animation "+this.settings.animationTime+"s linear "+(this.settings.infinite ? "infinite":"")+
"}\n" +
"#"+this.settings.divId+"."+this.settings.divLoadClassName+" ."+this.settings.rightDivName+"{" +
" "+this.prefix()+"animation: right-animation "+this.settings.animationTime+"s linear "+(this.settings.infinite ? "infinite":"")+
"}\n" +
"";
document.head.appendChild(style);
}
var obj = new Loading({divId:"circle"}); //例項化建構函式
obj.runOne(function () { //只執行一次,外加傳入一個匿名函式
console.log("動畫執行完成");
//obj.runForever(); // 呼叫一直執行的函式
});
</script>
</html>
以上就是全部程式碼加案例,需要在例項化的時候傳入一個物件,物件裡面需要傳入html裡面一個div盒子的id,這樣就可以自動生成相關效果。var obj = new Loading({divId:"circle"}); //例項化建構函式
所有可以配置項為:
{
animationTime:2,//動畫執行時間
divId:null,//div盒子的idClass
divWidth:"20px",//盒子的寬度
divHeight:"20px", // 盒子的高度
divLoadClassName: "spinner", //新增class名字後就會執行載入動畫
divClass:"wrap-box",//兩個盒子外面的盒子class
leftWrapDivName:"leftWrap-box", //第一個盒子的class名字
leftDivName:"left-box", //第一個盒子的class名字
rightWrapDivName:"rightWrap-box", //內部第二個盒子的class名字
rightDivName:"right-box", //內部第二個盒子的class名字
infinite:true, // 是否迴圈
loadingWidth:"1px", //圓圈寬度
loadingColor:"#30aee0" //圓圈的顏色
}
例項化成功了以後,需要呼叫相關方法:
只顯示載入動畫一次:
obj.runOne();
可以傳入回撥函式。
能無限載入的動畫:
obj.runForever();
obj.remove();
已知bug:如果設定的載入圖形過大,會發現底部有一條白色的細縫,現在還沒有解決。由於這個效果博主是要使用到vr上面,在小尺寸上面看不出來效果,為了趕專案,先把問題保留。
相關文章
- 支援無限載入的js圖片畫廊外掛JS
- Vue canvas繪製圓形進度條動畫載入VueCanvas動畫
- CSS3漂亮的loadding載入動畫CSSS3動畫
- 實現移動端上拉載入和下拉重新整理的vue外掛(mescroll.js)VueJS
- Spring Boot 如何熱載入jar實現動態外掛?Spring BootJAR
- Spring Boot 如何熱載入 jar 實現動態外掛?Spring BootJAR
- CSS3 loadding載入動畫效果CSSS3動畫
- CSS3載入等待動畫效果CSSS3動畫
- css3實現顫動的動畫CSSS3動畫
- antd圖示庫按需載入的外掛實現
- CSS3實現流星動畫CSSS3動畫
- 超酷的 CSS3 loading 預載入動畫特效CSSS3動畫特效
- 我用 CSS3 實現了一個超炫的 3D 載入動畫CSSS33D動畫
- Android-動態載入外掛資源,皮膚包的實現原理Android
- 環形動畫載入檢視AnimatedCircleLoadingView動畫View
- css3實現逐幀動畫CSSS3動畫
- FCPX外掛:48種圓形風格圖形設計廣播頻道欄目包裝動畫 Clean Broadcast Pack動畫AST
- Vue實現一個圖片懶載入外掛Vue
- CSS3圓形漸隱漸現迴圈出現CSSS3
- Android 圓角、圓形 ImageView 實現AndroidView
- 優雅的實現動態載入 css、jsCSSJS
- jquery文字動畫特效外掛分享animatext.js文件jQuery動畫特效JS
- js輕量級計數器動畫特效外掛JS動畫特效
- Android Reveal圓形Activity轉場動畫Android動畫
- 別用圖片了,CSS遮罩合成實現帶圓角的環形loading動畫CSS遮罩動畫
- css3實現動畫閃爍效果CSSS3動畫
- CSS3的過渡,動畫,圖形轉換CSSS3動畫
- Xpatch:免Root實現App載入Xposed外掛的一種方法APP
- CSS3實現動畫不會影響主執行緒,JS實現動畫會影響主執行緒CSSS3動畫執行緒JS
- css3動畫實現數字動態增加CSSS3動畫
- “破碎-重組-破碎” CSS3實現Lowpoly風格變形動畫終極篇CSSS3動畫
- JS實現載入層JS
- css3實現動畫有幾種方式?CSSS3動畫
- CSS3實現王者匹配時的粒子動畫效果CSSS3動畫
- kPagination-純js實現分頁外掛JS
- [前端外掛] js返回頂部 效果實現前端JS
- AE外掛:Bodymovin(AE動畫匯出json外掛)動畫JSON
- CSS3圓形進度條效果CSSS3
- 手動實現HTML外掛BeautifyHTML