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 国产精品综合,日本韩国黄色,欧美艳片情欲满载在线观看

          整合營銷服務商

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

          免費咨詢熱線:

          頭條首發必備指南#為了避免首發內容被他人抄襲

          頭條首發必備指南#為了避免首發內容被他人抄襲

          頭條首發必備指南#為了避免首發內容被他人抄襲,您可以采取以下措施:

          1. 使用版權聲明

          在您的內容中添加版權聲明,包括版權符號(?)、出版年份和版權持有人的名字。這樣可以明確表示您對內容的所有權,并在法律上提供一定程度的保護。

          2. 添加水印

          對于圖像和視頻內容,添加水印是一種常見的保護方法。水印通常包含文本或標識,被添加到內容中,使得內容竊賊難以或不可能在不改變或降低原始內容質量的情況下將其去除。

          3. 申請DMCA保護

          通過美國的《數字千年版權法案》(DMCA),您可以申請保護您的網站免受內容盜竊。一旦您的網站被標記為重復內容或剽竊,DMCA可以幫助您要求任何未經許可復制您的內容的人從其網站上刪除這些內容。

          4. 制定使用條款

          在您的網站上制定使用條款,明確規定訪問者如何使用您的內容以及任何未經授權的使用的后果。這是一份法律協議,可以用來保護您的內容,防止未經授權的使用。

          5. 使用密碼保護

          對于某些內容,您可以設置密碼保護,限制對這些內容的訪問。這樣,只有經過授權的用戶才能查看或下載這些內容,從而防止未授權的訪問和復制。

          6. 使用"無索引"元標簽

          通過在HTML代碼中添加"無索引"元標簽,您可以告訴搜索引擎不要索引某個特定網頁。這樣,您的內容將不會顯示在搜索引擎的結果頁上,減少了被他人找到和復制的機會。

          7. 保留創作記錄

          保留作品的創作記錄,包括草稿、修改稿、最終稿等。這些記錄可以證明作品的創作過程和原創性,防止他人抄襲。

          8. 使用原創性檢測軟件

          使用原創性檢測軟件可以幫助檢測作品是否與現有文獻相同或相似,從而避免抄襲和剽竊。

          9. 及時維權

          如果發現作品被抄襲或剽竊,應及時采取措施維權。可以通過法律途徑或向相關機構投訴,要求侵權者停止侵權行為并賠償損失。

          通過上述措施,您可以在一定程度上保護您的首發內容不被他人抄襲。同時,也要注意不斷提升自己的創作水平,形成獨特的風格和觀點,這樣即使有人試圖模仿,也難以達到同樣的原創性和深度。#頭條怎樣不侵權# #版權問題大討論# #標題是形式#

          信不少開發人員都會遇見這個問題,基本上每個網站都會有版權聲明,其中會用到版權符號copyright:?,但是我們在開發的過程中,是不能直接以漢字輸入?的,需要用到html代碼來實現輸出,否則顯示是不正常的,那么我們應該怎么利用html代碼來正常的輸出版權符號“?”的呢?

          如果我沒有記錯的話,html版權符號是?

          下面再給大家推薦其他的html特殊字符編碼

          使用一個“&”后面帶上特殊符指令,就可以了

          接下來再看一下下面的這些特殊符號的轉義寫法

          ?

          最后還有這些:

          大家可以收藏下上面這些html符號編碼,很有可能會用的到啊!

          、前言

          通常情況下,HTML 中的圖片資源會自上而下依次加載,而部分圖片只有在用戶向下滾動頁面的場景下才能被看見,否則這部分圖片的流量就白白浪費了。

          所以,對于那些含有大量圖片資源的網站,會采用“按需加載”的方式,也就是當圖片資源出現在視口區域內,才會被加載,這樣可能會影響一丟丟用戶體驗,但是能大大節省網站的流量。

          而上述“按需加載”的方式就是今天的主角 -- 圖片懶加載技術

          二、原理

          圖片懶加載技術主要通過監聽圖片資源容器是否出現在視口區域內,來決定圖片資源是否被加載。

          那么實現圖片懶加載技術的核心就是如何判斷元素處于視口區域之內。

          三、前世

          早前實現的思路:

          • 給目標元素指定一張占位圖,將真實的圖片鏈接存儲在自定義屬性中,通常是data-src;
          • 監聽與用戶滾動行為相關的 scroll 事件;
          • 在 scroll 事件處理程序中利用 Element.getBoundingClientRect() 方法判斷目標元素與視口的交叉狀態;
          • 當目標元素與視口的交叉狀態大于0時,將真實的圖片鏈接賦給目標元素 src 屬性或者 backgroundImage 屬性。

          1、scroll 事件

          scroll 事件可能會被高頻度的觸發,而按照上述思路,必然會在 scroll 事件處理程序中出現大量的 DOM 操作,這很可能會使頁面不再“如絲般順滑”,這時就需要降低 DOM 操作的頻率。

          降低 DOM 操作的頻率可以采用函數節流的方式,函數節流能夠確保在固定時間間隔只執行一次操作。

          與函數節流相關的另一個概念叫做函數防抖,這位兄弟同樣等待一個時間間隔執行操作,但是它被打斷之后就需要重新開始計時。

          這也是此場景下采用函數節流的原因。在 JavaScript 中可以采用 setTimeout + 閉包的方式實現函數節流:

          function throttle (fn, interval=500) {
           let timer=null
           let firstTime=true
           return function (...args) {
           if (firstTime) {
           // 第一次加載
           fn.apply(this, args)
           return firstTime=false
           }
           if (timer) {
           // 定時器正在執行中,跳過
           return
           }
           timer=setTimeout(()=> {
           clearTimeout(timer)
           timer=null
           fn.apply(this, args)
           }, interval)
           }
          }
          

          除了上述 setTimeout + 閉包的實現方式,還可以通過 window.requestAnimationFrame() 方法實現,這里不再贅述,有興趣的同學可以自己嘗試嘗試。

          2、getBoundingClientRect()方法

          JavaScript 提供 Element.getBoundingClientRect() 方法返回元素的大小以及相對于視口的位置信息,接下來會用到返回對象的四個屬性:

          • top 和 left 是目標元素左上角坐標與網頁左上角坐標的偏移值;
          • width 和 height 是目標元素自身的寬度和高度。

          再結合視口的高度和寬度,即可判斷元素是否出現在視口區域內:

          function isElementInViewport (el) {
           const { top, height, left, width }=el.getBoundingClientRect()
           const w=window.innerWidth || document.documentElement.clientWidth
           const h=window.innerHeight || document.documentElement.clientHeight
           return (
           top <=h &&
           (top + height) >=0 &&
           left <=w &&
           (left + width) >=0
           )
          }
          

          3、實現

          接下來在實現圖片懶加載的過程中,還需要注意一些小問題:

          • scroll 事件只有在滾動行為發生時,才會被觸發,這里需要手動加載一次首屏的圖片;
          • 利用 addEventListener 注冊事件處理程序時,需要保存事件處理程序的引用,以便銷毀注冊的事件程序。
          function LazyLoad (el, options) {
           if (!(this instanceof LazyLoad)) {
           return new LazyLoad(el)
           }
           this.setting=Object.assign({}, { src: 'data-src', srcset: 'data-srcset', selector: '.lazyload' }, options)
           if (typeof el==='string') {
           el=document.querySelectorAll(el)
           }
           this.images=Array.from(el)
           this.listener=this.loadImage()
           this.listener()
           this.initEvent()
          }
          LazyLoad.prototype={
           loadImage () {
           return throttle(function () {
           let startIndex=0
           while (startIndex < this.images.length) {
           const image=this.images[startIndex]
           if (isElementInViewport(image)) {
           const src=image.getAttribute(this.setting.src)
           const srcset=image.getAttribute(this.setting.srcset)
           if (image.tagName.toLowerCase()==='img') {
           if (src) {
           image.src=src
           }
           if (srcset) {
           image.srcset=srcset
           }
           } else {
           image.style.backgroundImage=`url(${src})`
           }
           this.images.splice(startIndex, 1)
           continue
           }
           startIndex++
           }
           
           if (!this.images.length) {
           this.destroy()
           }
           }).bind(this)
           },
           initEvent () {
           window.addEventListener('scroll', this.listener, false)
           },
           destroy () {
           window.removeEventListener('scroll', this.listener, false)
           this.images=null
           this.listener=null
           }
          }
          

          四、今生

          如今,Web為開發者提供了 IntersectionObserver 接口,它可以異步監聽目標元素與其祖先或視窗的交叉狀態,注意這個接口是異步的,它不隨著目標元素的滾動同步觸發,所以它并不會影響頁面的滾動性能。

          IntersectionObserver 構造函數接收兩個參數,回調函數以及配置項。

          1、配置項

          配置項中的參數有以下三個:

          • root:所監聽對象的具體祖先元素,默認是 viewport ;
          • rootMargin:計算交叉狀態時,將 margin 附加到祖先元素上,從而有效的擴大或者縮小祖先元素判定區域;
          • threshold:設置一系列的閾值,當交叉狀態達到閾值時,會觸發回調函數。

          2、回調函數

          IntersectionObserver 實例執行回調函數時,會傳遞一個包含 IntersectionObserverEntry 對象的數組,該對象一共有七大屬性:

          • time:返回一個記錄從 IntersectionObserver 的時間原點到交叉被觸發的時間的時間戳;
          • target:目標元素;
          • rootBounds:祖先元素的矩形區域信息;
          • boundingClientRect:目標元素的矩形區域信息,與前面提到的 Element.getBoundingClientRect() 方法效果一致;
          • intersectionRect:祖先元素與目標元素相交區域信息;
          • intersectionRatio:返回intersectionRect 與 boundingClientRect 的比例值;
          • isIntersecting:目標元素是否與祖先元素相交。

          3、實現

          在此之前,還需要了解 IntersectionObserver 實例方法:

          • observe:開始監聽一個目標元素;
          • unobserve:停止監聽特定的元素;
          • disconnect:使 IntersectionObserver 對象停止監聽工作;
          • takeRecords:為所有監聽目標返回一個 IntersectionObserverEntry 對象數組并且停止監聽這些目標。

          以下為實現代碼:

          function LazyLoad (images, options={}) {
           if (!(this instanceof LazyLoad)) {
           return new LazyLoad(images, options)
           }
           this.setting=Object.assign({}, { src: 'data-src', srcset: 'data-srcset', selector: '.lazyload' }, options)
           this.images=images || document.querySelectorAll(this.setting.selector)
           this.observer=null
           this.init()
          }
          LazyLoad.prototype.init=function () {
           let self=this
           let observerConfig={
           root: null,
           rootMargin: '0px',
           threshold: [0]
           }
           this.observer=new IntersectionObserver(entries=> {
           entries.forEach(entry=> {
           const target=entry.target
           if (entry.intersectionRatio > 0) {
           this.observer.unobserve(target)
           const src=target.getAttribute(this.setting.src)
           const srcset=target.getAttribute(this.setting.srcset)
           if ('img'===target.tagName.toLowerCase()) {
           if (src) {
           target.src=src
           }
           if (srcset) {
           target.srcset=srcset
           }
           } else {
           target.style.backgroundImage=`url(${src})`
           }
           }
           })
           }, observerConfig)
           this.images.forEach(image=> this.observer.observe(image))
          }
          

          五、總結

          到此,實現圖片懶加載主要有兩種方法:

          • 監聽 scroll 事件,通過 getBoundingClientRect() 計算目標元素與視口的交叉狀態;
          • IntersectionObserver 接口。

          第二種方法更加省心,到目前為止兼容性也還行:

          相比較下,第一種方法需要從各個方面去優化 scroll 事件,從而達到頁面滾動“如絲般順滑”的效果。最后,放上兩篇關于滾動優化的文章。

          • 百度外賣前端 -- 如何不擇手段提升scroll事件的性能(https://zhuanlan.zhihu.com/p/30078937)
          • 高性能滾動 scroll 及頁面渲染優化(https://www.cnblogs.com/coco1s/p/5499469.html)

          版權

          作者:descire

          鏈接:https://juejin.im/post/5c9376506fb9a070fc623b2c

          著作權歸作者所有。


          主站蜘蛛池模板: 国产色欲AV一区二区三区| 国产亚洲一区区二区在线| 中文字幕亚洲一区二区va在线| 精品亚洲一区二区三区在线观看 | 亚洲av无码一区二区三区在线播放 | 天堂一区人妻无码| 国产精华液一区二区区别大吗| 一区二区三区伦理高清| 少妇一夜三次一区二区| 国产日韩精品视频一区二区三区| 人妻无码视频一区二区三区 | 亚洲va乱码一区二区三区| 国产激情一区二区三区成人91| 中文字幕一区在线播放| 日韩一区二区三区免费体验| 亚洲高清一区二区三区| 精品国产伦一区二区三区在线观看| 亚洲AV无一区二区三区久久| 性无码免费一区二区三区在线| 亚洲国产精品一区| 一区二区无码免费视频网站| 国产精品无码亚洲一区二区三区| 爆乳无码AV一区二区三区| 免费萌白酱国产一区二区| 搜日本一区二区三区免费高清视频| www一区二区三区| 中文字幕一区二区区免| 久久久人妻精品无码一区| 人妻免费一区二区三区最新| 精品无码一区二区三区爱欲九九 | 人妻少妇精品视频一区二区三区 | 丰满少妇内射一区| 伊人久久精品无码av一区| 国产在线无码一区二区三区视频| 亚洲一区精品视频在线| 色欲精品国产一区二区三区AV| 精品国产一区二区三区久 | 国产精品一区视频| 亚洲日韩AV一区二区三区四区 | 中文字幕一区二区三区永久 | 精品国产福利第一区二区三区|