欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

原生JS實現(xiàn)首頁進度加載動畫

 更新時間:2016年09月14日 13:55:16   作者:蘇福  
這篇文章主要為大家詳細介紹了原生JS實現(xiàn)首頁進度加載動畫,具有一定的參考價值,感興趣的小伙伴們可以參考一下

js進度加載動畫程序是本人的個人作品,寫的不好,可以參考,但未經(jīng)本人允許,請不要用于其它用途! 

早上寫了個首頁進度加載動畫,本想在我的博客里用上,測試發(fā)現(xiàn)博客園加載太快,根本看不到動畫效果,直接就加載‘Complete'了,算了,還是不要把博客搞得太臃腫了! 

于是我就寫了個演示頁面,在body里加了個iframe來加載大一點的網(wǎng)站,這樣就看出效果了! 

用Safari打開貌似CSS動畫的播放時間變成同步了,不知道什么原因,本地測試又沒問題(請大神指點?。?,用Chrome、Firefox倒是沒問題,而IE我沒測試過 

加載時間統(tǒng)計我用了Windows對象的performance屬性,它是專門用來來計算精確時間的方法,這是MDN關(guān)于performance屬性的描述 

本實例的實現(xiàn)原理比較簡單,不過不是真正的按文件大小來顯示加載進度的,只是在觸發(fā)document.onreadystatechange事件時,根據(jù)document.readyState的狀態(tài)來改變顯示進度的。其實還有一種靠譜一點的方法,用XMLHttpRequest對象的實例的progress事件,詳細解讀XMLHttpRequest,如:

 var request = new XMLHttpRequest();
 request.onprogress = function (e) {
 if(e.lengthComputable){ //lengthComputable是指文件是否有大小,值為true、false
 progress.innerHTML = Math.round(100* e.loaded/ e.total) + \'%\'; //loaded、total表示已經(jīng)加載的大小和總大小
 }
 } 

用以上方法實現(xiàn)起來也挺麻煩,而且也不能實現(xiàn)100%的真實加載進度,所以我索性就假一點了,不用他了! 

本實例還用到了document.styleSheets[0].insertRule()方法,這里有我對它的總結(jié):用原生JS讀寫CSS樣式的方法總結(jié) 

關(guān)于CSS動畫的實現(xiàn),大家自己看代碼吧,很簡單的代碼,如果看的吃力,建議去補補CSS基礎(chǔ)了,介紹個干貨,CSS中文參考手冊網(wǎng)站,我表達能力有限,就不在這里嚼口舌了 

下面是完整代碼+演示:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>蘇福的作品</title>
 <script>
 document.onreadystatechange = function () {
 function $id(id){return document.getElementById(id)}
 var width = 0,id,
 preloader_line = $id('preloader_line').firstElementChild,
 preloader = $id('preloader'),
 preloader_center = $id('preloader_center'),
 preloader_btn = $id('preloader_btn'),
 preloader_loading = $id('preloader_loading');
 if (document.readyState == "interactive") {
 loading(1,110,50);
 }
 if (document.readyState == "complete") {
 loading(5,120,16.7);
 preloader_loading.id = 'preloader_loaded';
 preloader_loading.innerHTML = 'Loading Complete'+'<br/>'+'Using: '+performance.now().toFixed(3)+' ms';
 preloader_btn.innerHTML = 'E N T E R';
 preloader_btn.style.borderBottom = '4px solid green';
 preloader_btn.style.fontStyle = 'inherit';
 preloader_btn.style.fontSize = '24px';
 if(document.styleSheets[0].insertRule){
 document.styleSheets[0].insertRule('#preloader_btn:hover{border-bottom: 4px solid green;border-radius: 60px;color: red;}',0);
 }else{//兼容IE9以下
 document.styleSheets[0].addRule('#preloader_btn:hover{border-bottom: 4px solid green;border-radius: 60px;color: red;}',0);
 }
 preloader_btn.onclick = function () {
 var opacity = 1,id;
 function hide(){
 if(opacity<=0){
 clearTimeout(id);
 preloader.style.display = 'none';
 document.body.style.overflow = 'auto';
 return;
 }
 opacity -= 0.1;
 preloader.style.opacity = opacity;
 id = setTimeout(function(){
 hide();
 },50);
 }
 hide();
 };
 }
 function loading(step,max,time){
 if(width>=max){
 clearTimeout(id);
 if(max >= 120){
 preloader_line.parentNode.style.display = 'none';
 }
 return;
 }
 width += step;
 preloader_line.style.width = width+'px';
 id = setTimeout(function(){
 loading(step,max,time);
 },time);
 }
 };
 </script>
 <style>
 body{
 overflow: hidden;
 }
 #preloader{
 position: absolute;
 width: 100%;
 height: 100%;
 background-color: white;
 z-index: 999;
 }
 #preloader_center{
 position: absolute;
 left: 0;
 right: 0;
 top: 0;
 bottom: 0;
 width: 150px;
 height: 75px;
 margin:auto;
 }
 #preloader_loading{
 position: absolute;
 left: 0;
 right: 0;
 top: 45px;
 margin: auto;
 width: 96px;
 height: 30px;
 }
 #preloader_loaded{
 position: absolute;
 left: 0;
 right: 0;
 top: 45px;
 margin: auto;
 font-size: 12px;
 text-align: center;
 line-height: 30px;
 }
 #preloader_loading span{
 position: absolute;
 width: 10px;
 height: 2px;
 top: 0;
 bottom: 0;
 margin:auto;
 background-color: #9b59b6;
 animation: loading 1.5s infinite ease-in-out ;
 }
 #preloader_loading span:nth-child(2){
 left: 12px;
 animation-delay: .1s;
 }
 #preloader_loading span:nth-child(3){
 left: 24px;
 animation-delay: .2s;
 }
 #preloader_loading span:nth-child(4){
 left: 36px;
 animation-delay: .3s;
 }
 #preloader_loading span:nth-child(5){
 left: 48px;
 animation-delay: .4s;
 }
 #preloader_loading span:nth-child(6){
 left: 50px;
 animation-delay: .5s;
 }
 #preloader_loading span:nth-child(7){
 left: 62px;
 animation-delay: .6s;
 }
 #preloader_loading span:nth-child(8){
 left: 74px;
 animation-delay: .7s;
 }
 #preloader_loading span:nth-child(9){
 left: 86px;
 animation-delay: .8s;
 }
 @keyframes loading {
 0%{height: 2px;background:#9b59b6;}
 15%{height: 20px;background:#3498db;}
 50%{height: 2px;background:#9b59b6;}
 100%{height: 2px;background:#9b59b6;}
 }
 iframe{width: 100%;height: 1000px;}
 #preloader_btn{
 position: absolute;
 left: 0;
 right: 0;
 top: 0;
 margin:auto;
 display: block;
 width: 122px;
 height: 40px;
 font-size: 14px;
 text-align: center;
 line-height: 40px;
 cursor: pointer;
 color: #9b59b6;
 font-style: italic;
 -webkit-transition: all .5s;
 -moz-transition: all .5s;
 -ms-transition: all .5s;
 -o-transition: all .5s;
 transition: all .5s;
 }
 #preloader_line{
 position: absolute;
 left: 0;
 right: 0;
 top: 40px;
 margin:auto;
 width: 120px;
 height: 2px;
 border: 1px solid green;
 }
 #preloader_line span{
 display: block;
 height: 2px;
 width: 0;
 background-color: green;
 }
 </style>
</head>
<body>
<div id="preloader">
 <div id="preloader_center">
 <span id="preloader_btn">Loading...</span>
 <span id="preloader_line">
 <span></span>
 </span>
 <div id="preloader_loading">
 <span></span>
 <span></span>
 <span></span>
 <span></span>
 <span></span>
 <span></span>
 <span></span>
 <span></span>
 <span></span>
 </div>
 </div>
</div>
<iframe src="http://jd.com"></iframe>
</body>
</html>

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • jquery獲取radio值(單選組radio)

    jquery獲取radio值(單選組radio)

    jquery獲取radio值使用到特殊的選擇器type=radio,為方便大家理解,另附一個jquery實例,想學(xué)習(xí)的朋友可以看看
    2014-10-10
  • 微信小程序新手教程之啟動頁的重要性

    微信小程序新手教程之啟動頁的重要性

    這篇文章主要給大家介紹了關(guān)于微信小程序新手教程之啟動頁重要性的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • JSON 數(shù)據(jù)詳解及實例代碼分析

    JSON 數(shù)據(jù)詳解及實例代碼分析

    這篇文章主要介紹了JSON 數(shù)據(jù)詳解及實例代碼分析的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • 完美解決瀏覽器跨域的幾種方法(匯總)

    完美解決瀏覽器跨域的幾種方法(匯總)

    下面小編就為大家?guī)硪黄昝澜鉀Q瀏覽器跨域的幾種方法(匯總)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • JS防抖節(jié)流函數(shù)的實現(xiàn)與使用場景

    JS防抖節(jié)流函數(shù)的實現(xiàn)與使用場景

    在行走江湖的過程中,會出現(xiàn)很多性能優(yōu)化的問題來讓你手足無措,那么這篇文章主要給大家介紹了關(guān)于JS防抖節(jié)流函數(shù)的實現(xiàn)與使用場景,針對這兩個問題來為你答疑解惑,需要的朋友可以參考下
    2021-07-07
  • JS實現(xiàn)移動端觸屏拖拽功能

    JS實現(xiàn)移動端觸屏拖拽功能

    這篇文章主要介紹了JS實現(xiàn)移動端觸屏拖拽功能,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07
  • JS實現(xiàn)的幾個常用算法

    JS實現(xiàn)的幾個常用算法

    本文給大家分享日常中比較熟悉的常用的幾個算法用JS的實現(xiàn),非常不錯,具有參考借鑒價值,感興趣的朋友一起看看吧
    2016-11-11
  • javascript數(shù)字數(shù)組去重復(fù)項的實現(xiàn)代碼

    javascript數(shù)字數(shù)組去重復(fù)項的實現(xiàn)代碼

    console.log 不支持ie,下面的代碼需要在火狐中測試,不然會有問題。
    2010-12-12
  • js實現(xiàn)左右輪播圖

    js實現(xiàn)左右輪播圖

    這篇文章主要為大家詳細介紹了js實現(xiàn)左右輪播圖,實現(xiàn)手動和自動兩種方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • 讓你一句話理解閉包(簡單易懂)

    讓你一句話理解閉包(簡單易懂)

    下面小編就為大家?guī)硪黄痪湓捓斫忾]包(簡單易懂)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06

最新評論