欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

uni-app彈出層uni-popup使用及修改默認樣式的方法實例

 更新時間:2022年11月16日 10:25:33   作者:lsjweiyi  
我們在使用uniapp開發(fā)的時候,有時可以使用uniapp自有的樣式模板,這樣可以提高開發(fā)效率,下面這篇文章主要給大家介紹了關于uni-app彈出層uni-popup使用及修改默認樣式的相關資料,需要的朋友可以參考下

uni-popup官方文檔

我這里的背景是彈出一個選擇規(guī)格的菜單。使用vue3+ts,使用組合式api

首先看看在vue3+ts+setup下的使用:

<template>
    <!-- 定義一個按鈕,用于打開彈出層 -->
    <view style="width: 200px">
        <button @click="openSpecs">彈出</button>
    </view>
    <!-- 彈出層視圖,注意這里的ref="popup",這里背景特意標紅了,方便看到效果 -->
    <uni-popup class="updatePopup" background-color="red" ref="popup" type="center"> 你好 </uni-popup>
</template>

<script setup lang="ts">
    import { ref } from "vue";

    // 這里的這個變量名,必須和上面的ref="popup"的變量名相同,這樣就相當于綁定了這個元素了
    const popup = ref(null);

    // 按鈕調(diào)用該方法打開彈出層
    function openSpecs() {
        popup.value.open();
    }
</script>

<style>
</style>

從這里可以看出來,彈出層的整體是透明的,而主界面是隨著內(nèi)部的元素大小自適應的。

現(xiàn)在在彈出層中編寫復雜的效果

我新建了一個selectSpecs.vue:

<template>
    <view class="background">
        <!-- 標題 -->
        <view style="text-align: center">
            <text class="title">{{ title }}</text>
        </view>
        <!-- 區(qū)域滾動視圖 -->
        <scroll-view scroll-y="true" :style="'height:' + scrollH + 'px'">
            <!-- 結合分組和數(shù)據(jù)選擇器展示數(shù)據(jù),不是本文的重點 -->
            <uni-group mode="card" top="0" v-for="item in specsList" :key="item.key" :title="item.text"  id="group">
                <uni-data-checkbox mode="tag" :v-model="item.value" :localdata="item.option"></uni-data-checkbox>
            </uni-group>
        </scroll-view>
    </view>
</template>
<script setup lang="ts">
    import { onMounted, ref } from "vue";

    // 下面都是一些生成數(shù)據(jù)的邏輯,可以不關心。
    let title = "標題測試";

    interface iOption {
        key: number;
        text: string;
        disable: boolean;
        value: number;
    }

    interface iSpecs {
        key: number;
        text: string;
        value: number;
        option: iOption[];
    }

    const specsList: iSpecs[] = new Array<iSpecs>(3);
    for (let i = 0; i < 10; i++) {
        const optionList: iOption[] = new Array<iOption>(i + 1);
        for (let j = 0; j < i + 1; j++) {
            optionList[j] = {
                key: j,
                text: "屬性" + j,
                disable: false,
                value: j,
            };
        }
        specsList[i] = {
            key: i,
            text: "規(guī)格" + i,
            value: i,
            option: optionList,
        };
    }

    // 這里是為了確定滾動區(qū)域的高度,不給高度不滾動的,這里的效果或許還有點問題。
    const scrollH = ref(0);
    onMounted(() => {
        let group = uni.createSelectorQuery().select("#group"); //根據(jù)id獲取一個規(guī)格組的高度
        // prettier-ignore
        group.boundingClientRect((data) => {
            //計算高度:高度控制在3個規(guī)格組的高度以內(nèi),即3個組以內(nèi)不需要滾動,+10是因為實測獲取的高度比真實高度少一點,不加的話就會需要小范圍的滾動一下
            if (specsList.length<3){
                scrollH.value=(data.height+10)* specsList.length
            }else{
                scrollH.value=(data.height+10)*3
            }
            }).exec();
    });
</script>
<style>
    .background {
        background-color: white;
        border-radius: 10px;
    }
    .title {
        font-size: x-large;
        font-family: "Times New Roman", Times, Cursive;
        text-align: center;
    }
</style>

這里內(nèi)容看似很長,其實都是為了展示效果,可以不看細節(jié)。可以看看我對滾動區(qū)域的高度的設置方法。

引入的方式是將上面“你好”改為如下:

<uni-popup background-color="red" ref="popup" type="center">
     <SelectSpecs></SelectSpecs>
</uni-popup>

當然組件也是要import的:

<script setup lang="ts">
    import { ref } from "vue";
    import SelectSpecs from "../goods/view/selectSpecs.vue"; //導入組件
	.......
</script>

當我數(shù)據(jù)小的時候,他的效果是這樣的:

那個四個紅角就是背景的顏色。這個效果還可以

當我數(shù)據(jù)多了之后:

因為寬度自適應,所以寬度是占滿了整個屏幕的寬度。你看屬性9都換行了。而我希望我的彈出層上下左右都留出一點空間,這樣才好看。

我首先想到的是,給這個寬度限制一個最大百分比,用max-width: 80%;,加在background 樣式的里面,因為這是整個背景的視圖嘛,結果效果是這樣的:

紅色背景依然是整個屏幕的寬度,但內(nèi)容跑左邊去了,這不是我想要的效果。再看看數(shù)據(jù)量小的效果:

這看起來是白色框框占紅色背景的80%呀,并不是內(nèi)容占屏幕的80%呀。還不會居中了。

看來是我的樣式加的位置不對,但是uni-popup也沒提供這個參數(shù)。在uni-popup嵌套一層 view來控制樣式:

<template>
    <!-- 定義一個按鈕,用于打開彈出層 -->
    <view style="width: 200px">
        <button @click="openSpecs">彈出</button>
    </view>
    <!-- 彈出層視圖,注意這里的ref="popup",這里背景特意標紅了,方便看到效果 -->
    <view style="max-width: 80%">
        <uni-popup background-color="red" ref="popup" type="center">
            <SelectSpecs></SelectSpecs>
        </uni-popup>
    </view>
</template>

這樣也沒效果。

于是debug發(fā)現(xiàn),真正控制彈出層主窗體大小的樣式是“.uni-popup__wrapper”,難道我要去修改源代碼嗎?這樣不太好,不利于代碼移植。

于是就想著有沒有辦法從子組件修改父組件的樣式的方法,結果沒找到,倒是找到了父組件修改子組件的樣式的方法,于是代碼稍微修改一下:

    <uni-popup class="updatePopup" background-color="red" ref="popup" type="center">
        <SelectSpecs></SelectSpecs>
    </uni-popup>

增加了一個樣式:

<style scoped>
    .updatePopup :deep(.uni-popup__wrapper) {
        max-width: 80%;
    }
</style>

這里注意.vue文件允許有多組<style>,我這里就是新建的一個<style scoped>,然后用深度選擇器去修改子組件的樣式。

其實父組件與.uni-popup__wrapper中間還隔著一兩層view節(jié)點,但是:deep也是可以找到這個樣式去修改的。

最后效果是這樣的:

即使數(shù)據(jù)多的時候,它也不會把屏幕寬度占滿。

其實也是學會了一招修改子組件的樣式。

補充:uniapp uni-popup彈出層組件 彈窗 無法彈出 自定義樣式問題

之前用到彈出層組件時發(fā)現(xiàn)彈出時會有一層灰色的遮罩,后來調(diào)試了幾次發(fā)現(xiàn)是因為沒有自定義給彈出層寬高,嘗試了幾次終于做到自己想要的效果,話不多說,直接附上完整代碼:

效果圖:

<template>
	<view>
		<view class="sign_text" @tap="toggle('center')">
			<text style="line-height: 60px;margin-top: 12px;">點擊彈出</text>
		</view>
		<!-- 普通彈窗 -->
		<uni-popup ref="popup" background-color="#fff">
			<view class="popup-content" :class="{ 'popup-height': type === 'left' || type === 'right' }">
				<view style="color: green;">
					這是一個彈窗
				</view>
				<view style="color: red;" @click="close()">
					關閉彈窗
				</view>
			</view>
		</uni-popup>
	</view>
</template>

<script>
	export default {
		data() {
			return {

			}
		},
		methods: {
			//彈窗開啟
			toggle(type) {
				this.type = type
				this.$refs.popup.open(type)
			},
			//彈窗關閉
			close() {
				this.$refs.popup.close()
			},

		}
	}
</script>

<style>
	.popup-content {
		display: flex;
		flex-direction: row;
		align-items: center;
		justify-content: center;
		padding: 15px;
		height: 200px;
		width: 280px;
		background-color: #fff;
		border-radius: 10px;
	}

</style>

下面教一下不會靈活使用的同學這個組件應該怎么用

一、uni-popup彈出層

官網(wǎng)組件地址:https://ext.dcloud.net.cn/pluginid=329

可以先翻看一下官網(wǎng)的介紹,很有用。

二、使用步驟

.首先要去官網(wǎng)把這個組件導入到項目中或者下載到本地,常規(guī)放在components文件目錄下:

最好是這三個都要一起下載,這樣用的時候比較方便,使用的時候按需引入,自定義組件樣式就好了

總結

到此這篇關于uni-app彈出層uni-popup使用及修改默認樣式的文章就介紹到這了,更多相關uni-app彈出層uni-popup使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論