国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 微信小程序 小程序開發(fā) 聊聊怎么在小程序中實(shí)現(xiàn)一個(gè)可截?cái)嗟钠俨剂鹘M件

聊聊怎么在小程序中實(shí)現(xiàn)一個(gè)可截?cái)嗟钠俨剂鹘M件

Jan 24, 2022 am 10:32 AM
小程序 微信小程序

怎么在小程序中實(shí)現(xiàn)一個(gè)可截?cái)嗟钠俨剂鹘M件?下面本篇文章給大家介紹一下微信小程序?qū)崿F(xiàn)可截?cái)嗥俨剂鹘M件的方法,希望對(duì)大家有所幫助!

聊聊怎么在小程序中實(shí)現(xiàn)一個(gè)可截?cái)嗟钠俨剂鹘M件

瀑布流是一種常見的布局方式,實(shí)現(xiàn)的方式有許多,比如直接分兩列,然后控制在左右兩列加入元素;還有一種方式就是通過絕對(duì)定位的方式來放置兩邊?!鞠嚓P(guān)學(xué)習(xí)推薦:小程序開發(fā)教程

本文所要介紹的瀑布流不同于常規(guī)的,因?yàn)槠俨剂髦虚g可能會(huì)被截?cái)啵?/p>

1.png

對(duì)于上面的布局,如果強(qiáng)制分成兩列去做布局就不太適合了,因此我采用了絕對(duì)定位的方式來進(jìn)行布局,由于瀑布流中的元素高度都不是固定的,因此我得想辦法獲取到每個(gè)元素的高度,然后判定元素到底是放一整行,還是左側(cè),亦或者右側(cè)。

首先我們來看下模板部分的實(shí)現(xiàn):

<view class="container" style="height:{{height}}px;">
	<view wx:for="{{list}}" wx:key="index" style="{{item.style}}" class="wrapper">
		<abstract item="{{item}}"/>
	</view>
</view>
<view wx:if="{{tmp}}" class="computed-zone">
	<view class="wrapper">
		<abstract item="{{tmp}}"/>
	</view>
</view>

模板比較簡(jiǎn)單,一個(gè) container 容器,然后循環(huán)數(shù)組,平級(jí)渲染出一堆 wrapper 容器。

wrapper 容器是一個(gè)絕對(duì)定位的包裹元素,wrapper 容器里面需要放置需要實(shí)際渲染的組件,為了靈活性更高一點(diǎn),我把這個(gè)渲染組件設(shè)置成了虛擬節(jié)點(diǎn),在使用組件的時(shí)候可以指定實(shí)際渲染的自定義組件。

因?yàn)?wrapper 元素是絕對(duì)定位的,因此我們需要手動(dòng)去維護(hù)整個(gè) container 容器的高度。

這里有個(gè)問題是,我們?cè)趺传@取里面元素的高度呢?模板中的 computed-zone 就是來解決這個(gè)問題的,在將元素放置到數(shù)組之前,我們先把元素在 computed-zone 中進(jìn)行渲染,然后通過 WXML api 來獲取其中元素的實(shí)際渲染尺寸,這樣我們就可以知道這個(gè)元素實(shí)際渲染的寬高度了。

有了每個(gè)元素的渲染尺寸信息之后,我們需要確認(rèn)元素到底是占滿整行,還是占半邊:

  • 如果元素的渲染寬度跟容器一樣,那么就可以判斷這個(gè)元素沾滿一整行,需要將包裹容器 wrapper 設(shè)置為一整行的寬度;

  • 如果不滿足1條件,那么就需要基于左右元素的總高度,將 wrapper 放在左側(cè)或者右側(cè)。

分析下來,需要稍微寫點(diǎn)兒邏輯的就是對(duì) wrapper 計(jì)算偏移量,處理到底放左邊還是放右邊,亦或者占滿整行,核心的代碼實(shí)現(xiàn)如下:

{
	// 將 setData Promise 化,方便使用
	$setData(data) {
		return new Promise(resolve => {
			this.setData(data, () => {
				resolve();
			});
		});
	},
	// 獲取元素的渲染尺寸
	getRect(item) {
		return this.$setData({
			tmp: item,
		}).then(() => {
			return new Promise((resolve, reject) => {
				const query = this.createSelectorQuery(); // 注意要使用 this,不要再使用 wx 前綴了
				query.select(&#39;.computed-zone .wrapper&#39;).boundingClientRect();
				query.exec(ret => {
					if (ret[0]) {
						resolve(ret[0]);
					} else {
						reject(&#39;not found dom!&#39;);
					}
				});
			});
		});
	},
	// 添加元素,內(nèi)部使用
	addItem(item) {
		let tick = this.tick;
		return this.getRect(item).then(rect => {
			if (tick !== this.tick) {
				return Promise.reject(&#39;tick&#39;);
			}
			const { margin } = this.data;
			let { height, width } = rect;
			const windowWidth = this.sysInfo.windowWidth;
			let [ leftTotal, rightTotal ] = this.height; // leftTotal 左側(cè)欄高度,rightTotal 右側(cè)欄高度,
			let marginPx = this.sysInfo.getPx(margin);
			let style = &#39;&#39;;

			if (Math.abs(width - windowWidth) < 3) {
				// 占滿屏幕寬度
				style = `left:0;top:${ Math.max(leftTotal, rightTotal) }px;width:100%;`;
				leftTotal = rightTotal = Math.max(leftTotal + height, rightTotal + height);
			} else if (rightTotal < leftTotal) {
				// 放入右邊
				style = `right:${ marginPx }px;top:${ rightTotal }px;`;
				rightTotal += height;
			} else {
				// 放入左邊
				style = `left:${ marginPx }px;top:${ leftTotal }px;`;
				leftTotal += height;
			}

			const { list = [] } = this.data;
			const targetKey = `list[${list.length}]`; // 利用直接操作數(shù)組下標(biāo)的方式來觸發(fā)數(shù)組修改,性能有很大提升
			this.height = [leftTotal, rightTotal]; // 記錄最新的左右側(cè)高度
			return this.$setData({
				[targetKey]: {
					data: item,
					style,
				},
				height: Math.max(leftTotal, rightTotal),
			});
		});
	},
	// 實(shí)際添加元素使用,自建Promise隊(duì)列,保證順序一致
	add(item) {
		let pending = this.pending || Promise.resolve();
		return this.pending = pending.then(() => {
			return this.addItem(item);
		}).catch(err => {
			console.error(err);
			this.pending = null;
			throw err;
		});
	},
	clear() {
		this.tick = tick++;
		this.height = [0, 0];
		this.pending = null;
		this.setData({
			list: [],
			height: 0,
		});
	},
}

在使用該組件的時(shí)候我們就不能直接通過賦值數(shù)組的方式來渲染元素了,而是得通過組件實(shí)例方法add(item) 的方式,因?yàn)槲覍?shí)現(xiàn)了隊(duì)列,因此可以直接循環(huán) add 就行。如果關(guān)心狀態(tài)就判斷最后一個(gè)元素的 add 操作是否完成即可。

通過這種方式來實(shí)現(xiàn)的瀑布流靈活性相對(duì)較高,但是性能消耗也是不低的,需要挨個(gè)獲取元素的實(shí)際渲染尺寸,如果要支持窗口的resize的話,那消耗是恐怖。

對(duì)于需要看代碼細(xì)節(jié)的同學(xué),我將實(shí)際的demo放到了 Github微信代碼片段,有需要的同學(xué)可以試一試。

基于上面的模型,其實(shí)也可以優(yōu)化成只渲染可視區(qū)范圍內(nèi)的元素,可以大大提升瀑布流的性能,希望有時(shí)間的同學(xué)可以完善完善,我來fork點(diǎn)贊~o( ̄▽ ̄)d

更多編程相關(guān)知識(shí),請(qǐng)?jiān)L問:編程視頻?。?/p>

以上是聊聊怎么在小程序中實(shí)現(xiàn)一個(gè)可截?cái)嗟钠俨剂鹘M件的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

閑魚微信小程序正式上線 閑魚微信小程序正式上線 Feb 10, 2024 pm 10:39 PM

閑魚官方微信小程序悄然上線,在小程序中可以發(fā)布閑置與買家/賣家私信交流、查看個(gè)人資料及訂單、搜索物品等,有用好奇閑魚微信小程序叫什么,現(xiàn)在快來看一下。閑魚微信小程序叫什么答案:閑魚,閑置交易二手買賣估價(jià)回收。1、在小程序中可以發(fā)布閑置、與買家/賣家私信交流、查看個(gè)人資料及訂單、搜索指定物品等功能;2、在小程序的頁面中有首頁、附近、發(fā)閑置、消息、我的5項(xiàng)功能;3、想要使用的話必要要開通微信支付才可以購(gòu)買;

實(shí)現(xiàn)微信小程序中的卡片翻轉(zhuǎn)特效 實(shí)現(xiàn)微信小程序中的卡片翻轉(zhuǎn)特效 Nov 21, 2023 am 10:55 AM

實(shí)現(xiàn)微信小程序中的卡片翻轉(zhuǎn)特效在微信小程序中,實(shí)現(xiàn)卡片翻轉(zhuǎn)特效是一種常見的動(dòng)畫效果,可以提升用戶體驗(yàn)和界面交互的吸引力。下面將具體介紹如何在微信小程序中實(shí)現(xiàn)卡片翻轉(zhuǎn)的特效,并提供相關(guān)代碼示例。首先,需要在小程序的頁面布局文件中定義兩個(gè)卡片元素,一個(gè)用于顯示正面內(nèi)容,一個(gè)用于顯示背面內(nèi)容,具體示例代碼如下:&lt;!--index.wxml--&gt;&l

實(shí)現(xiàn)微信小程序中的圖片濾鏡效果 實(shí)現(xiàn)微信小程序中的圖片濾鏡效果 Nov 21, 2023 pm 06:22 PM

實(shí)現(xiàn)微信小程序中的圖片濾鏡效果隨著社交媒體應(yīng)用的流行,人們?cè)絹碓较矚g在照片中應(yīng)用濾鏡效果,以增強(qiáng)照片的藝術(shù)效果和吸引力。在微信小程序中也可以實(shí)現(xiàn)圖片濾鏡效果,為用戶提供更多有趣和創(chuàng)造性的照片編輯功能。本文將介紹如何在微信小程序中實(shí)現(xiàn)圖片濾鏡效果,并提供具體的代碼示例。首先,我們需要在微信小程序中使用canvas組件來加載和編輯圖片。canvas組件可以在頁面

實(shí)現(xiàn)微信小程序中的下拉菜單效果 實(shí)現(xiàn)微信小程序中的下拉菜單效果 Nov 21, 2023 pm 03:03 PM

實(shí)現(xiàn)微信小程序中的下拉菜單效果,需要具體代碼示例隨著移動(dòng)互聯(lián)網(wǎng)的普及,微信小程序成為了互聯(lián)網(wǎng)開發(fā)的重要一環(huán),越來越多的人開始關(guān)注和使用微信小程序。微信小程序的開發(fā)相比傳統(tǒng)的APP開發(fā)更加簡(jiǎn)便快捷,但也需要掌握一定的開發(fā)技巧。在微信小程序的開發(fā)中,下拉菜單是一個(gè)常見的UI組件,實(shí)現(xiàn)了更好的用戶操作體驗(yàn)。本文將詳細(xì)介紹如何在微信小程序中實(shí)現(xiàn)下拉菜單效果,并提供具

支付寶上線'漢字拾光-生僻字”小程序,用于征集、補(bǔ)充生僻字庫(kù) 支付寶上線'漢字拾光-生僻字”小程序,用于征集、補(bǔ)充生僻字庫(kù) Oct 31, 2023 pm 09:25 PM

本站10月31日消息,今年5月27日,螞蟻集團(tuán)宣布啟動(dòng)“漢字拾光計(jì)劃”,最近又迎來新進(jìn)展:支付寶上線“漢字拾光-生僻字”小程序,用于向社會(huì)征集生僻字,補(bǔ)充生僻字庫(kù),同時(shí)提供不同的生僻字輸入體驗(yàn),以幫助完善支付寶內(nèi)的生僻字輸入方法。目前,用戶搜索“漢字拾光”、“生僻字”等關(guān)鍵詞就可以進(jìn)入“生僻字”小程序。在小程序里,用戶可以提交尚未被系統(tǒng)識(shí)別錄入的生僻字圖片,支付寶工程師在確認(rèn)后,將會(huì)對(duì)字庫(kù)進(jìn)行補(bǔ)錄入。本站注意到,用戶還可以在小程序體驗(yàn)最新的拆字輸入法,這一輸入法針對(duì)讀音不明確的生僻字設(shè)計(jì)。用戶拆

閑魚微信小程序叫什么 閑魚微信小程序叫什么 Feb 27, 2024 pm 01:11 PM

閑魚官方微信小程序已經(jīng)悄然上線,它為用戶提供了一個(gè)便捷的平臺(tái),讓你可以輕松地發(fā)布和交易閑置物品。在小程序中,你可以與買家或賣家進(jìn)行私信交流,查看個(gè)人資料和訂單,以及搜索你想要的物品。那么閑魚在微信小程序中究竟叫什么呢,這篇教程攻略將為您詳細(xì)介紹,想要了解的用戶們快來跟著本文繼續(xù)閱讀吧!閑魚微信小程序叫什么答案:閑魚,閑置交易二手買賣估價(jià)回收。1、在小程序中可以發(fā)布閑置、與買家/賣家私信交流、查看個(gè)人資料及訂單、搜索指定物品等功能;2、在小程序的頁面中有首頁、附近、發(fā)閑置、消息、我的5項(xiàng)功能;3、

微信小程序?qū)崿F(xiàn)圖片上傳功能 微信小程序?qū)崿F(xiàn)圖片上傳功能 Nov 21, 2023 am 09:08 AM

微信小程序?qū)崿F(xiàn)圖片上傳功能隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展,微信小程序已經(jīng)成為了人們生活中不可或缺的一部分。微信小程序不僅提供了豐富的應(yīng)用場(chǎng)景,還支持開發(fā)者自定義功能,其中包括圖片上傳功能。本文將介紹如何在微信小程序中實(shí)現(xiàn)圖片上傳功能,并提供具體的代碼示例。一、前期準(zhǔn)備工作在開始編寫代碼之前,我們需要先下載并安裝微信開發(fā)者工具,并注冊(cè)成為微信開發(fā)者。同時(shí),還需要了解微信

使用微信小程序?qū)崿F(xiàn)輪播圖切換效果 使用微信小程序?qū)崿F(xiàn)輪播圖切換效果 Nov 21, 2023 pm 05:59 PM

使用微信小程序?qū)崿F(xiàn)輪播圖切換效果微信小程序是一種輕量級(jí)的應(yīng)用程序,具有簡(jiǎn)單、高效的開發(fā)和使用特點(diǎn)。在微信小程序中,實(shí)現(xiàn)輪播圖切換效果是常見的需求。本文將介紹如何使用微信小程序?qū)崿F(xiàn)輪播圖切換效果,并給出具體的代碼示例。首先,在微信小程序的頁面文件中,添加一個(gè)輪播圖組件。例如,可以使用&lt;swiper&gt;標(biāo)簽來實(shí)現(xiàn)輪播圖的切換效果。在該組件中,可以通過b

See all articles