Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 亚洲黄色免费视频,欧美激情一区,影音先锋中文在线

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          css3動畫-加載中...

          幾個簡單的加載中動畫吧。

          像前面三種都是相當于幾個不同的點輪流來播放同一動畫:變大變小。css3里面有一個用于尺度變換的方法:scale(x,y)定義 2D 縮放轉換,改變元素的寬度和高度。

          第四種就是一個小球從上往下跌落,再彈回去,在上面的時候速度最小,下面的時候速度最大。由于該小球只進行了上下的移動,所以我們可以運用:translateY(n):定義 2D 轉換,沿著 Y 軸移動元素,從而實現小球沿Y方向來回移動。

          廢話不多說了,上代碼。

          首先,第一個加載中的動畫:

          html Code

          <div id="loading1">
                   <div class="demo1"></div>
                   <div class="demo1"></div>
                   <div class="demo1"></div>
                   <div class="demo1"></div>
                   <div class="demo1"></div>
           </div>

          css Code

          .demo1 {
               width: 4px;
               height: 4px;
               border-radius: 2px;
               background: #68b2ce;
               float: left;
               margin: 0 3px;
               animation: demo1 linear 1s infinite;
               -webkit-animation: demo1 linear 1s infinite;
           }
           .demo1:nth-child(1){
               animation-delay:0s;
           }
           .demo1:nth-child(2){
               animation-delay:0.15s;
           }
           .demo1:nth-child(3){
               animation-delay:0.3s;
           }
           .demo1:nth-child(4){
               animation-delay:0.45s;
           }
           .demo1:nth-child(5){
               animation-delay:0.6s;
           }
           @keyframes demo1 
           {
               0%,60%,100% {transform: scale(1);}
               30% {transform: scale(2.5);}
           }
           @-webkit-keyframes demo1 
           {
               0%,60%,100% {transform: scale(1);}
               30% {transform: scale(2.5);}
           }
          
          css Code

          第二個動畫和第一個動畫大同小異,第一個動畫是將小球整體變大變小,第二動畫則是將小方塊的高度變大變小,而寬度不變:

          html Code

           <div id="loading2">
               <div class="demo2"></div>
               <div class="demo2"></div>
               <div class="demo2"></div>
               <div class="demo2"></div>
               <div class="demo2"></div>
           </div>

          css Code

          .demo2 {
               width: 4px;
               height: 6px;
               background: #68b2ce;
               float: left;
               margin: 0 3px;
               animation: demo2 linear 1s infinite;
               -webkit-animation: demo2 linear 1s infinite;
           }
           .demo2:nth-child(1){
               animation-delay:0s;
           }
           .demo2:nth-child(2){
               animation-delay:0.15s;
           }
           .demo2:nth-child(3){
               animation-delay:0.3s;
           }
           .demo2:nth-child(4){
               animation-delay:0.45s;
           }
           .demo2:nth-child(5){
               animation-delay:0.6s;
           }
           @keyframes demo2 
           {
               0%,60%,100% {transform: scale(1);}
               30% {transform: scaleY(3);}
           }
           @-webkit-keyframes demo2 
           {
               0%,60%,100% {transform: scale(1);}
               30% {transform: scaleY(3);}
           }
          
          css Code

          第三個動畫就需要將小球的位置定位一下,讓幾個小球整體上看起來圍成一個圓,然后就像第一個一樣使小球變大變?。?/p>

          html Code

           <div id="loading1">
                   <div class="demo1"></div>
                   <div class="demo1"></div>
                   <div class="demo1"></div>
                   <div class="demo1"></div>
                   <div class="demo1"></div>
           </div>

          css Code

          #loading3 {
               position: relative;
               width: 50px;
               height: 50px;
           }
           .demo3 {
               width: 4px;
               height: 4px;
               border-radius: 2px;
               background: #68b2ce;
               position: absolute;
               animation: demo3 linear 0.8s infinite;
               -webkit-animation: demo3 linear 0.8s infinite;
           }
           .demo3:nth-child(1){
               left: 24px;
               top: 2px;
               animation-delay:0s;
           }
           .demo3:nth-child(2){
               left: 40px;
               top: 8px;
               animation-delay:0.1s;
           }
           .demo3:nth-child(3){
               left: 47px;
               top: 24px;
               animation-delay:0.1s;
           }
           .demo3:nth-child(4){
               left: 40px;
               top: 40px;
               animation-delay:0.2s;
           }
           .demo3:nth-child(5){
               left: 24px;
               top: 47px;
               animation-delay:0.4s;
           }
           .demo3:nth-child(6){
               left: 8px;
               top: 40px;
               animation-delay:0.5s;
           }
           .demo3:nth-child(7){
               left: 2px;
               top: 24px;
               animation-delay:0.6s;
           }
           .demo3:nth-child(8){
               left: 8px;
               top: 8px;
               animation-delay:0.7s;
           }
           
           @keyframes demo3 
           {
               0%,40%,100% {transform: scale(1);}
               20% {transform: scale(3);}
           }
           @-webkit-keyframes demo3 
           {
               0%,40%,100% {transform: scale(1);}
               20% {transform: scale(3);}
           }
          

          接下來是第四個動畫:

          1 <div id="loading5">
          2      <div class="demo5"></div>
          3 </div>
           #loading5 {
               width: 20px;
               height: 100px;
               border-bottom: 1px solid #68b2ce;
           }
           .demo5 {
               width: 20px;
               height: 20px;
               border-radius: 10px;
               background: #68b2ce;
               animation: demo5 cubic-bezier(0.5,0.01,0.9,1) 0.6s infinite alternate;
               -webkit-animation: demo5 cubic-bezier(0.5,0.01,0.9,1) 0.6s infinite alternate;
           }
           @keyframes demo5
           {
               0%{
                   transform:translateY(0px);
                   -webkit-transform:translateY(0px);
               }
               100% {
                   transform:translateY(80px);
                   -webkit-transform:translateY(80px);
               }
           }
           @-webkit-keyframes demo5
           {
               0%{
                   transform:translateY(0px);
                   -webkit-transform:translateY(0px);
               }
               100% {
                   transform:translateY(80px);
                   -webkit-transform:translateY(80px);
               }
           }
          
          css Code

          以上就是這幾個簡單的加載中小動畫的內容了。

          轉載 https://www.cnblogs.com/tangchan/p/7604594.html

          覽器加載一個js腳本,會在devtools中留下各種痕跡,elements中的script元素,console中的日志,source中的代碼,network中的網絡請求等

          elements

          這個比較簡單,插入js的時候設置好id,在js中刪掉自身就好了

          <script id="xxx">
              // todo
              document.getElementById("xxx").remove();
          </script>
          

          對于引用js

          <script id="xxx" src="a.js"></script>
          
          // a.js
          document.getElementById("xxx").remove()
          

          對于動態加載的js也是一樣的

          <script>
              let e=document.createElement("script");
              e.id="xxx";
              e.src="a.js";
              document.head.appendChild(e);
          </script>
          
          // a.js
          document.getElementById("xxx").remove()
          

          或者也可以這樣

          <script>
              let e=document.createElement("script");
              e.src="a.js";
              document.head.appendChild(e);
              e.remove();
          </script>
          

          雖然看起來很奇怪,但a.js確實能執行,似乎是加載a.js時阻塞了腳本執行,執行完a.js之后再remove

          console

          clear就好了

          console.clear()
          

          source

          直接引用和動態加載都會在source中出現

          <script src="a.js"></script>
          
          <script>
              let e=document.createElement("script");
              e.src="a.js";
              document.head.appendChild(e);
          </script>
          

          這樣都是不行的,經過測試發現動態插入js代碼時不會被記錄在source中

          <script>
              fetch("a.js").then(resp => {
                  return resp.text()
              }).then(text => {
                  let e = document.createElement("script");
                  e.innerHTML = text;
                  document.head.appendChild(e);
              })
          </script>
          

          這樣a.js就不會出現在source里了

          network

          常規HTTP/WebSocket都會被記錄,無法繞過,但是WebRTC不會,WebRTC可以基于UDP/TCP傳輸,WebRTC提供createDataChannel API,可以用于傳輸文本,那么就可以實現network隱藏加載

          考慮WebRTC需要傳遞offer和icecandidate,還是得通過HTTP/WebSocket傳輸,而且復雜網絡環境下還需要使用或部署STUN/TURN服務器,穩定性有待考慮

          WebRTC技術可以參考學習我最近看的幾篇文章透明日報20200801期

          其他的方法我還沒有找到,技術不行就社會工程

          一個思路是可以偽裝成其他流量混過去,比如png

          <script>
              fetch("a.png").then(resp => {
                  return resp.text()
              }).then(text => {
                  let e = document.createElement("script");
                  e.innerHTML = text;
                  document.head.appendChild(e);
              })
          </script>
          

          然后在delvtools里也看不出來

          另外一個思路是devtools目前只在打開的時候記錄network數據,那么只要在devtools關閉的時候加載資源,打開就不加載,這樣就不會出現在network里了

          新的問題又出現了,如何檢測devtools的狀態,網上已經有不少公開技巧了

          https://github.com/sindresorhus/devtools-detect

          https://github.com/AEPKILL/devtools-detector

          最后

          還可以在哪里找到加載和執行痕跡呢

          還有什么方法可以隱藏這些痕跡呢

          如果你現在也想學習前端開發技術,在學習前端的過程當中有遇見任何關于學習方法,學習路線,學習效率等方面的問題,你都可以申請加入我的Q群:前114中6649后671還有大牛整理的一套高效率學習路線和教程與您免費分享,還有許多大廠面試真題。希望能夠對你們有所幫助。

          能大家都知道,js執行會阻塞DOM樹的解析和渲染,那么css加載會阻塞DOM樹的解析和渲染嗎?接下來,我們就一起來分析一下。

          原理解析

          那么為什么會出現上面的現象呢?我們從瀏覽器的渲染過程來解析下。

          不同的瀏覽器使用的內核不同,所以他們的渲染過程也是不一樣的。目前主要有兩個:

          webkit渲染過程

          Gecko渲染過程

          從上面兩個流程圖我們可以看出來,瀏覽器渲染的流程如下:

          1. HTML解析文件,生成DOM Tree,解析CSS文件生成CSSOM Tree
          2. 將Dom Tree和CSSOM Tree結合,生成Render Tree(渲染樹)
          3. 根據Render Tree渲染繪制,將像素渲染到屏幕上。

          從流程我們可以看出來

          1. DOM解析和CSS解析是兩個并行的進程,所以這也解釋了為什么CSS加載不會阻塞DOM的解析。
          2. 然而,由于Render Tree是依賴于DOM Tree和CSSOM Tree的,所以他必須等待到CSSOM Tree構建完成,也就是CSS資源加載完成(或者CSS資源加載失敗)后,才能開始渲染。因此,CSS加載是會阻塞Dom的渲染的。
          3. 由于js可能會操作之前的Dom節點和css樣式,因此瀏覽器會維持html中css和js的順序。因此,樣式表會在后面的js執行前先加載執行完畢。所以css會阻塞后面js的執行。

          DOMContentLoaded

          對于瀏覽器來說,頁面加載主要有兩個事件,一個是DOMContentLoaded,另一個是onLoad。而onLoad沒什么好說的,就是等待頁面的所有資源都加載完成才會觸發,這些資源包括css、js、圖片視頻等。

          而DOMContentLoaded,顧名思義,就是當頁面的內容解析完成后,則觸發該事件。那么,正如我們上面討論過的,css會阻塞Dom渲染和js執行,而js會阻塞Dom解析。那么我們可以做出這樣的假設

          1. 當頁面只存在css,或者js都在css前面,那么DomContentLoaded不需要等到css加載完畢。
          2. 當頁面里同時存在css和js,并且js在css后面的時候,DomContentLoaded必須等到css和js都加載完畢才觸發。

          我們先對第一種情況做測試:

          <!DOCTYPE html>
          <html lang="en">
           <head>
           <title>css阻塞</title>
           <meta charset="UTF-8">
           <meta name="viewport" content="width=device-width, initial-scale=1">
           <script>
           document.addEventListener('DOMContentLoaded', function() {
           console.log('DOMContentLoaded');
           })
           </script>
           <link  rel="stylesheet">
           </head>
           <body>
           </body>
          </html>
          

          實驗結果如下圖:

          從動圖我們可以看出來,css還未加載完,就已經觸發了DOMContentLoaded事件了。因為css后面沒有任何js代碼。

          接下來我們對第二種情況做測試,很簡單,就在css后面加一行代碼就行了

          <!DOCTYPE html>
          <html lang="en">
           <head>
           <title>css阻塞</title>
           <meta charset="UTF-8">
           <meta name="viewport" content="width=device-width, initial-scale=1">
           <script>
           document.addEventListener('DOMContentLoaded', function() {
           console.log('DOMContentLoaded');
           })
           </script>
           <link  rel="stylesheet">
           <script>
           console.log('到我了沒');
           </script>
           </head>
           <body>
           </body>
          </html>
          

          實驗結果如下圖:

          我們可以看到,只有在css加載完成后,才會觸發DOMContentLoaded事件。因此,我們可以得出結論:

          1. 如果頁面中同時存在css和js,并且存在js在css后面,則DOMContentLoaded事件會在css加載完后才執行。
          2. 其他情況下,DOMContentLoaded都不會等待css加載,并且DOMContentLoaded事件也不會等待圖片、視頻等其他資源加載。

          總結

          由上所述,我們可以得出以下結論:

          1. css加載不會阻塞DOM樹的解析
          2. css加載會阻塞DOM樹的渲染
          3. css加載會阻塞后面js語句的執行、

          因此,為了避免讓用戶看到長時間的白屏時間,我們應該盡可能的提高css加載速度,比如可以使用以下幾種方法:

          1. 使用CDN(因為CDN會根據你的網絡狀況,替你挑選最近的一個具有緩存內容的節點為你提供資源,因此可以減少加載時間)
          2. 對css進行壓縮(可以用很多打包工具,比如webpack,gulp等,也可以通過開啟gzip壓縮)
          3. 合理的使用緩存(設置cache-control,expires,以及E-tag都是不錯的,不過要注意一個問題,就是文件更新后,你要避免緩存而帶來的影響。其中一個解決防范是在文件名字后面加一個版本號)
          4. 減少http請求數,將多個css文件合并,或者是干脆直接寫成內聯樣式(內聯樣式的一個缺點就是不能緩存)

          主站蜘蛛池模板: eeuss鲁片一区二区三区| 精品人妻一区二区三区毛片| 亚洲一区二区三区高清在线观看| 国产爆乳无码一区二区麻豆 | 国产AV天堂无码一区二区三区| 亚洲AV成人精品日韩一区 | 国产激情精品一区二区三区| 国产精品va无码一区二区| 日本片免费观看一区二区| 韩国精品福利一区二区三区| 久久久国产一区二区三区| 一区二区视频在线播放| 国产精品va一区二区三区| 成人无码一区二区三区| AV无码精品一区二区三区| 蜜桃视频一区二区三区| 亚洲av综合av一区| 综合激情区视频一区视频二区| 国产亚洲无线码一区二区| 乱码人妻一区二区三区| 最美女人体内射精一区二区| 国产香蕉一区二区三区在线视频| 国产精品福利区一区二区三区四区| 亚洲一区二区三区精品视频| 无码精品人妻一区二区三区AV| 麻豆一区二区99久久久久| 国产一区二区福利久久| 亚洲丰满熟女一区二区v| 一区二区网站在线观看| 一区二区无码免费视频网站| 中文字幕在线播放一区| 亚洲综合在线一区二区三区| 国产品无码一区二区三区在线蜜桃| 国产精品视频免费一区二区| 日本成人一区二区三区| 国产成人高清视频一区二区 | 欧洲精品一区二区三区| 日本免费一区二区三区四区五六区 | 亚洲夜夜欢A∨一区二区三区| 日韩精品人妻一区二区三区四区 | 久久精品无码一区二区三区|