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 最近中文字幕完整版视频在线看,久久国内精品视频,一二三四社区在线视频观看

          整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          Chrome瀏覽器自帶滾動截圖功能

          Chrome瀏覽器自帶滾動截圖功能

          動截屏通常需要裝第三方軟件,又要面臨到底裝哪個截圖軟件最好用,其實(shí)谷歌瀏覽器就自帶滾動截屏功能。

          使用快捷鍵打開瀏覽器的控制臺 Ctrl + Shift + I (Windows) || Option + Command + I (Mac)或者 “右鍵”-> "查看"

          使用快捷鍵打開命令行 Command + Shift + P (Mac) || Ctrl + Shift + P (Windows)

          輸入Screenshot,選擇Capture full size screenshot來滾動截圖

          選擇區(qū)域:Capture area screenshot會出現(xiàn)一個?,拉動鼠標(biāo)選擇要截圖的區(qū)域,鼠標(biāo)左鍵一松開就會下載選擇區(qū)域?qū)σ粋€的圖片

          整個網(wǎng)頁:Capture full size screenshot 這里以百度新聞為例演示

          節(jié)點(diǎn)網(wǎng)頁:Capture node screenshot 節(jié)點(diǎn)截圖需要在Elements中選中要截圖的html節(jié)點(diǎn)元素,并且節(jié)點(diǎn)元素必須在瀏覽器中可以看到,就會截圖html節(jié)點(diǎn)對應(yīng)的html內(nèi)容



          當(dāng)前屏幕:Capture screenshot 截取瀏覽器當(dāng)前屏幕內(nèi)容,不包括控制臺面板。


          歡迎關(guān)注本賬號,將持續(xù)發(fā)布實(shí)用技術(shù)文章

          日常的抓取工作當(dāng)中,經(jīng)??吹骄W(wǎng)站為了減輕網(wǎng)頁加載所需資源對圖片等資源進(jìn)行延遲加載。那什么樣的頁面需要用到延遲加載呢?比如我們打開一個圖片網(wǎng)站,一個頁面有很多圖片,這個時候我們就用的到延遲加載;比如我們寫一篇很長的技術(shù)博客的時候也需要配一些圖,這里也可以用到延遲加載。那什么是延遲加載呢?簡單的說是一種對網(wǎng)頁的性能優(yōu)化,加載一個很多圖片的網(wǎng)頁不需要先把全部圖片加載出來,而是只加載可視區(qū)域的圖片即可,當(dāng)滾動到需要顯示圖片的地方再發(fā)送圖片請求。

          延遲加載

          <img> 標(biāo)簽有一個屬性是 src,用來表示圖像的 url,當(dāng)這個屬性的值不為空時,瀏覽器就會根據(jù)這個值發(fā)送請求。如果沒有 src 屬性,就不會發(fā)送請求。我們可以利用這一個特征去實(shí)現(xiàn)延遲加載,先不設(shè)置 src 屬性,當(dāng)需要圖片加載時將圖片真正的 url 取出放入 src 中。

          HTML 和 CSS

          .img-area{width: 500px;height: 500px; margin: 0 auto;}.my-photo{width:500px; height: 300px}
          <div class="container">
           <div class="img-area"><img class="my-photo" alt="loading" data-src="./img/img1.jpg" /></div>
           <div class="img-area"><img class="my-photo" alt="loading" data-src="./img/img2.jpg" /></div>
           <div class="img-area"><img class="my-photo" alt="loading" data-src="./img/img3.jpg" /></div>
           <div class="img-area"><img class="my-photo" alt="loading" data-src="./img/img4.jpg" /></div>
           <div class="img-area"><img class="my-photo" alt="loading" data-src="./img/img5.jpg" /></div>
           <div class="img-area"><img class="my-photo" alt="loading" data-src="./img/img1.jpg" /></div>
           <div class="img-area"><img class="my-photo" alt="loading" data-src="./img/img2.jpg" /></div>
           <div class="img-area"><img class="my-photo" alt="loading" data-src="./img/img3.jpg" /></div>
           <div class="img-area"><img class="my-photo" alt="loading" data-src="./img/img4.jpg" /></div>
           <div class="img-area"><img class="my-photo" alt="loading" data-src="./img/img5.jpg" /></div> </div>

          方法

          1. getBoundingClientRect()

          通過 getBoundingClientRect() 方法來獲取元素的大小以及位置

          這個方法返回一個名為 ClientRect的 DOMRect對象,包含了 top、 right、 botton、 left、 width、 height 這些值。參考 mdn 上的圖:

          可以看出返回的元素位置是相對于左上角而言的,而不是邊距。

          什么情況下算進(jìn)入可視區(qū)域呢?這里的 container.top 即表示圖片到可視區(qū)域頂部距離,window.innerHeight 來表示可視區(qū)域的高度。隨著滾動條的向下滾動,container.top 會越來越小,也就是圖片到可視區(qū)域頂部的距離越來越小,當(dāng) container.top===window.innerHeight 時,圖片的上沿應(yīng)該是位于可視區(qū)域下沿的位置的臨界點(diǎn)。也就是說 container.top <=window.innerHeight 時,圖片是在可視區(qū)域內(nèi)的。

          簡單判斷一下:

          // 偽代碼function check(container) { var container=... // 100是為了讓圖片提前加載,過渡更自然
           return container.top <=window.innerHeight + 100}

          替換 src,

          function loadImg(container) { if (!container.src) container.src=container.dataset.src
          }

          檢測圖片是否在可加載區(qū)域內(nèi):

          function checkImg() { var imgs=Array.from(document.querySelectorAll('.my-photo'))
           imgs.forEach(container=> { if (check(container)) loadImg(container)
          })
          }

          到此基本就可以實(shí)現(xiàn)一個簡單的圖片延遲加載,但是老鳥告訴我要注意頻繁滾動等于頻繁的DOM操作,這個時候有必要設(shè)置函數(shù)節(jié)流,具體操作請參考 ,函數(shù)節(jié)流

          第二種方法:IntersectionObserver

          可以參考阮一峰老師的 IntersectionObserver API 使用教程 ,這里講的深入淺出。

          前端開發(fā)中經(jīng)常遇到需要考慮某個元素何時進(jìn)入視口容器,通常我們會選擇第一種方式來實(shí)現(xiàn),監(jiān)聽 scroll 事件, 調(diào)用 getBoundingClientRect() 方法,這種方法確實(shí)是不錯的方法,但是要考慮函數(shù)節(jié)流,這也是它的缺點(diǎn),由于 scroll 事件頻繁觸發(fā),容易造成性能問題。

          這個新的 API 可以自動觀察元素是否在視口內(nèi),這就很強(qiáng)大了,讓我們看下怎么使用呢,

          var io=new IntersectionObserver(callback, option);// 開始觀察io.observe(document.getElementById('example'));// 停止觀察io.unobserve(element);// 關(guān)閉觀察器io.disconnect();

          callback參數(shù)是一個數(shù)組,每個數(shù)組都是一個 IntersectionObserverEntry 對象,我們來打印下

          屬性說明引用 阮一峰老師的

          time:可見性發(fā)生變化的時間,是一個高精度時間戳,單位為毫秒

          target:被觀察的目標(biāo)元素,是一個 DOM 節(jié)點(diǎn)對象

          rootBounds:根元素的矩形區(qū)域的信息,getBoundingClientRect()方法的返回值,如果沒有根元素(即直接相對于視口滾動),則返回null

          boundingClientRect:目標(biāo)元素的矩形區(qū)域的信息

          intersectionRect:目標(biāo)元素與視口(或根元素)的交叉區(qū)域的信息

          intersectionRatio:目標(biāo)元素的可見比例,即intersectionRect占boundingClientRect的比例,完全可見時為1,完全不可見時小于等于0

          這里最重要的屬性就是 intersectionRatio,通過該屬性判斷是否在可視區(qū)域內(nèi),當(dāng) intersectionRatio > 0 && intersectionRatio <=1 即在可視區(qū)域內(nèi)。

          我們通過 IntersectionObserver 這個API 就很方便了,

          // IntersectionObserver 傳入 callbackvar io=new IntersectionObserver(ioes=> {
           ioes.forEach(ioe=> { var el=ioe.target
           var intersectionRatio=ioe.intersectionRatio
           console.log(intersectionRatio)
           if (intersectionRatio > 0 && intersectionRatio <=1) {
           loadImg(el)
           }
           el.onload=el.onerror=()=> io.unobserve(el)
           })
          })function checkImg() { var imgs=Array.from(document.querySelectorAll('.my-photo'))
           imgs.forEach(item=> io.observe(item))
          }function loadImg(el) { if (!el.src) {
           el.src=el.dataset.src
           }
          }
          checkImg()

          效果如下

          tml頁面設(shè)置動態(tài)金額滾動效果!

          一開始加載頁面,數(shù)字都會過渡滾動到具體數(shù)字上!

          代碼:

          html:

          css:

          js:


          主站蜘蛛池模板: 日本免费一区二区三区四区五六区 | 无码国产精品一区二区免费16| 韩日午夜在线资源一区二区| 国产91精品一区二区麻豆网站| 精品一区二区三区电影| 亚洲AV日韩AV一区二区三曲| 91精品一区国产高清在线| 婷婷亚洲综合一区二区| 伊人久久大香线蕉AV一区二区| 亚洲国产精品一区二区成人片国内 | 中文字幕一区精品| 国产剧情一区二区| 国产精品资源一区二区| 无码人妻一区二区三区兔费| 精品视频无码一区二区三区| 色偷偷av一区二区三区| 精品福利一区二区三| 人妻少妇精品一区二区三区| 一区二区三区四区无限乱码| 日本一区中文字幕日本一二三区视频 | 亚洲国产欧美一区二区三区| 一区二区三区日韩| 久久99热狠狠色精品一区| 香蕉视频一区二区| 久久精品一区二区| 久久国产一区二区三区| 亚洲一区二区三区电影| 久久久av波多野一区二区| 日韩精品无码免费一区二区三区 | 国产主播福利精品一区二区| 国产午夜精品一区二区三区极品| 精品一区高潮喷吹在线播放| 精品不卡一区二区| 在线播放精品一区二区啪视频| 精品国产一区二区三区免费看| 国产凸凹视频一区二区| 好爽毛片一区二区三区四| 国产精品无圣光一区二区| 亚洲国产老鸭窝一区二区三区| 国产免费一区二区三区| 国产在线步兵一区二区三区|