<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      [前端小項目] 模糊加載 blurry loading (50projects50days)

      ??前言

      • 這個小項目源于github項目:?50 projects 50 days, 這個項目包含了50個小型前端項目,適合學習了Html+Css+JavaScript但是還沒有學習框架的前端新手作為練習。
      • 這里是原項目對模糊加載的代碼實現??Blurry Loading.

      ??分析


      • 變化過程:
      1. 數字從0不斷增長到100;
      2. 中間的百分比數字逐漸消失,即透明度opacity到1到0;
      3. 背景圖片從模糊變為清晰,濾鏡filter:blur()的參數設置為從30px0px.

      ??布局

      • body使用flex布局,將文字置于屏幕中央即可。

      ??圖片大小

      • 圖片的寬高如果只是設置成100vw100vh的話,在邊界處會出現白色模糊區域(濾鏡導致)。
      • 可以將背景圖片的寬高設置大一些,然后再調整topleft屬性,然后body設置overflow:hidden;,將白色模糊區域置于“屏幕”之外。

      ?進度模擬

      • JavaScript中使用setInterval()即可模擬進度不斷增加。
      • 在進度值達到100時,使用clearInterval()取消進度增加。

      ??不同數值范圍之間的映射

      • 由于進度值是從0到100,而數字文本的opacity參數是從1到0,模糊濾鏡的參數值是從30到0,不同的數值范圍之間需要有一個映射關系。

      變量名 意義
      $in\_min$ 輸入范圍的起始值
      $in\_max$ 輸入范圍的終止值
      $input$ 輸入的值
      $out\_min$ 輸出范圍的起始值
      $out\_max$ 輸出范圍的終止值
      $output$ 輸出的值,即映射得到的值

      輸入值在輸入范圍內占比:

      \[scale_0 = \frac{input-in\_min}{in\_max - in\_min} \]

      輸出值在輸出范圍內的占比:

      \[scale_1 = \frac{output-out\_min}{out\_max - out\_min} \]

      又因為輸入值在輸入范圍內的占比輸出值在輸出范圍中的占比應保持一致:

      \[\frac{input-in\_min}{in\_max - in\_min} = \frac{output-out\_min}{out\_max - out\_min} \]

      化簡后,可得輸出值output:

      \[output = \frac{input-in\_min}{in\_max - in\_min} \times (out\_max - out\_min) + out\_min \]

      function scale(num, inMin, inMax, outMin, outMax) {
              return ((num - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin;
          }
      

      該函數代碼參考自StackOverflow??map a range of numbers to another range of numbers


      ??代碼實現

      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <meta http-equiv="X-UA-Compatible" content="IE=edge">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>blurry-loading</title>
          <style>
              * {
                  margin: 0;
                  padding: 0;
                  box-sizing: border-box;
              }
      
              body {
                  min-height: 100vh;
                  /* 使用flex布局,將文字設置在屏幕中間 */
                  display: flex;
                  align-items: center;
                  justify-content: center;
                  overflow: hidden;
              }
      
              .bg {
                  position: absolute;
                  background: url(https://images.unsplash.com/photo-1576161787924-01bb08dad4a4?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2104&q=80) no-repeat center center/cover;
                  filter: blur(0px);
                  z-index: -1;
                  /* blur濾鏡會導致圖片邊界出現白色區域,將圖片擴大可以改善 */
                  top:-30px;
                  left:-30px;
                  width: calc(100vw + 60px);
                  height: calc(100vh + 60px);
              }
      
              .load {
                  /* 文字樣式 */
                  font-size: 2rem;
                  color: #fff;
                  font-weight: bold;
                  /* 設置為不可選中 */
                  user-select: none;
              }
          </style>
      </head>
      
      <body>
          <section class="bg"></section>
          <p class="load">0%</p>
      </body>
      <script>
          // 獲取文字和背景圖片
          const loadText = document.querySelector('.load');
          const bg = document.querySelector('.bg');
      
          //load表示當前進度的百分比數字
          let load = 0;
      
          // setInterval:進度不斷增加,并渲染進度數字和背景模糊程度
          const int = setInterval(loading, 20);
      
          function loading() {
              //進度增加
              load++;
      
              //如果進度到達100,表示進度完成,不用增加了。
              if (load > 99) {
                  clearInterval(int);
              }
              
              //修改進度百分數
              loadText.innerText = `${load}%`;
              //修改數字的透明度:具體表現為文字逐漸隱形
              loadText.style.opacity = scale(load, 0, 100, 1, 0);
              //修改背景圖片的模糊程度
              bg.style.filter = `blur(${scale(load,0,100,30,0)}px)`;
          }
      
          //https://stackoverflow.com/questions/10756313/javascript-jquery-map-a-range-of-numbers-to-another-range-of-numbers
          //這個函數的作用是:獲取 一個在某范圍內的值 映射到 另一個范圍時 對應的值。
          function scale(num, inMin, inMax, outMin, outMax) {
              return ((num - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin;
          }
      </script>
      </html>
      
      posted @ 2022-06-27 17:07  feixianxing  閱讀(312)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 一二三四中文字幕日韩乱码| 国产做无码视频在线观看浪潮| 仙桃市| 人妻中文字幕精品系列| 啊轻点灬大JI巴太粗太长了在线| 真人性囗交视频| 亚洲性日韩精品一区二区| 综合亚洲网| 日韩有码中文字幕国产| 午夜福利影院不卡影院| 欧美一区内射最近更新| 成年午夜免费韩国做受视频| 国产精品无遮挡在线观看| 国精品无码一区二区三区在线蜜臀| 翁牛特旗| 久久99久国产精品66| 成人无套少萝内射中出| 国产精品中文字幕观看| 美欧日韩一区二区三区视频| 午夜精品一区二区三区免费视频| av永久免费网站在线观看| 成人国产精品一区二区不卡| 91老肥熟女九色老女人| 国产办公室秘书无码精品99| 国产suv精品一区二区五| 国产精品深夜福利免费观看| 亚洲香蕉网久久综合影视| 亚洲一区二区国产av| 中文字幕亚洲人妻一区| 亚洲av日韩av永久无码电影| 亚洲午夜久久久影院伊人| 国产真正老熟女无套内射| 亚洲人成人伊人成综合网无码| 99久久无码一区人妻a黑| 国产精品福利片在线观看| 99国产欧美另类久久久精品| 四虎在线成人免费观看| 91午夜福利在线观看精品| 天堂网在线观看| 疯狂做受XXXX高潮国产| 色道久久综合亚洲精品蜜桃|