91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

微信小程序實現圖片模糊預加載功能

發布時間:2020-06-15 15:47:10 來源:億速云 閱讀:400 作者:元一 欄目:web開發

導語

小程序是一種不用下載就能使用的應用,也是一項門檻非常高的創新,經過將近兩年的發展,已經構造了新的小程序開發環境和開發者生態。小程序也是這么多年來中國IT行業里一個真正能夠影響到普通程序員的創新成果,現在已經有超過150萬的開發者加入到了小程序的開發,與我們一起共同發力推動小程序的發展,小程序應用數量超過了一百萬,覆蓋200多個細分的行業,日活用戶達到兩個億,小程序還在許多城市實現了支持地鐵、公交服務。小程序發展帶來更多的就業機會,2017年小程序帶動就業104萬人,社會效應不斷提升。

由于小程序沒有提供 Image 這個 js 對象,所以在小程序中實現預加載不能直接像原生js 一樣,直接使用 new Image()創建一個圖片對象,只能在視圖層創建圖片,通過onLoad事件監聽圖片加載完成。

實現圖片模糊加載的思路就是先加載一個目標圖片的縮略圖,縮略圖的加載一般非常快可以忽略不計,縮略圖加載完成之后以高斯模糊的形式展示,與此同時加載原圖,原圖加載完成后替代原縮略圖,原圖和縮略圖需要設置相同的寬高。 思路理清楚之后,開始碼代碼吧~

由于項目使用了Taro框架,下面的代碼寫法是React的寫法,原生或者其他框架也可以參考,沒有太大的出入,思路都是一樣的。

imgLoader.js(以下為部分代碼)

       // 監聽原圖加載完成
	toggleOriginLoaded() {
		this.setState({
			loaded: true
		});
	}
	// 監聽縮略圖加載完成
	toggleThumbLoaded() {
		this.setState({
			thumbLoaded: true
		});
	}
	
	render() {
		let { loaded, thumbLoaded } = this.state;
		let { imgU, imgW, imgH } = this.props;
		// 根據傳入的寬高設置縮略圖和原圖的寬高
		let style = {
			width: imgW + 'rpx',
			height: imgH + 'rpx'
		}
		
		return (
			<Block>
				<Image
					className='image--not-loaded'
					style={Object.assign({ display: loaded ? 'none' : 'auto' }, style)}
					lazyLoad
					mode='aspectFill'
					onLoad={this.toggleThumbLoaded.bind(this)}
					src={compressImage(imgU, '10x' + parseInt(imgH * 10 / imgW))}
				/>
				{thumbLoaded && (
					<Image
						style={Object.assign({ display: loaded ? 'auto' : 'none' }, style)}
						lazyLoad
						className='image--is-loaded'
						mode='aspectFill'
						src={imgU}
						onLoad={this.toggleOriginLoaded.bind(this)}
					/>
				)}
			</Block>
		);
	}

以上為主要視圖層和邏輯層代碼,其中compressImage函數是用來處理圖片剪裁也就是縮略圖的生成的,(ps:我們是用nginx實現的動態壓縮,裁剪等功能,有需要的小伙伴可以自行搜索相關教程~)

主要邏輯處理完成之后我們再來看模糊樣式的處理,在此就要介紹一個 css 方法 blur()。

blur() CSS方法將高斯模糊應用于輸出圖片。它只有一個接受一個參數blur(radius)

radius 表示模糊的半徑,值為length。 它定義了高斯函數的標準偏差值,即屏幕上有多少像素相互融合; 因此,較大的值會產生
更多模糊。值為0會使輸入保持不變。 該值為空則為0。(來自MDN)它可以生成類似毛玻璃樣式的圖片,如下圖:

微信小程序實現圖片模糊預加載功能

了解了這個方法之后,就讓我們來愉快的玩耍(寫代碼)吧~ 我們可以給這個效果添加一個小動畫,讓它看起來更有意思哦~

.image--not-loaded{
  // fix ios 缺少重繪的問題,添加無意義的transform強制觸發重繪
  transform: scale(1);
  filter:blur(30px);
}
.image--is-loaded{
  // fix ios 缺少重繪的問題,添加無意義的transform強制觸發重繪
  transform: scale(1);
  filter:blur(20px);
  animation: sharpen 0.8s both;
}
@keyframes sharpen {
  0% {
    filter: blur(20px);
  }
  100% {
    filter: blur(0px);
  }
}

需要注意的是blur方法在ios上會出現無法正確展示的問題,查詢了相關文章后發現是因為ios 缺少重繪,就是ios不會根據這個代碼重新繪制頁面因此不能正確展示,如果要解決這個問題只要給他加上一條沒有意義的transform,強制觸發重繪就可以了~~

以上就是小程序實現圖片模糊預加載的詳細內容,更多請關注億速云其它相關文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

微博| 沂源县| 永善县| 沙雅县| 台中市| 额济纳旗| 柳河县| 集安市| 海兴县| 融水| 嘉义市| 筠连县| 宁乡县| 进贤县| 都兰县| 宝鸡市| 长岛县| 太康县| 彭水| 随州市| 房产| 古丈县| 都匀市| 泰兴市| 安远县| 象州县| 红河县| 扶风县| 竹北市| 贡觉县| 阿克陶县| 繁峙县| 榆树市| 永丰县| 东明县| 滁州市| 双辽市| 观塘区| 博罗县| 宝应县| 吐鲁番市|