前兩天遇到的問題,暫時沒有解決,就擱置了。
不解決又難受,還好今天解決了,記錄下
需求:
兩個gif圖,分別代表點擊之后的男生和女生,并且有兩個靜態的男生和女生圖片
當男生靜態圖被點擊的時候切換男生的gif圖,女生靜態圖被點擊的時候切換女生的gif圖
主要就是根據動態變量控制靜態圖和gif的圖切換,但是來回多點擊幾次后發現,只有第一次從靜態圖切換到gif圖的時候,才有gif的動態效果
然后才知道,原來在uni-app中使用image組件展示gif圖片的時候,通常會遇到只有第一次點擊時有動態效果,第二次點擊不展示的問題。這是因為image組件默認會對同一個src地址的圖片進行緩存,導致第二次點擊時直接從緩存中讀取,而不會重新加載圖片。
解決思路就是:每次點擊的圖片鏈接地址加上一個隨機參數,強制讓image組件去重新加載圖片
我這里是vue3的寫法,只是寫法不同,實現效果一樣的
<view class="chose-sex-image"><view @click="choseSex('boy')" > <image v-if="data.isStaticBoy" src="靜態boy圖片路徑.png" style="width: 161rpx; height: 184rpx"></image><image v-else :src="data.boygif" style="width: 200rpx; height: 200rpx"></image></view><view @click.stop="choseSex('girl')" > <image v-if="data.isStaticGirl" src="靜態girl圖片路徑.png"style="width: 161rpx; height: 184rpx"></image><image v-else :src="data.girlgif" style="width: 200rpx; height: 200rpx"></image></view></view></view>
const data = ref({isStaticGirl: true,isStaticBoy: true, boygif: '動態boy路徑.gif',girlgif: '動態girl路徑.gif'});
function choseSex(key) {if (key === "boy") {data.value.isStaticBoy = false;data.value.isStaticGirl = true; data.value.boygif = '/static/images/動態boy路徑.gif?' + new Date().getTime();} else {data.value.isStaticGirl = false;data.value.isStaticBoy = true; data.value.girlgif = '/static/images/動態girl路徑.gif?' + new Date().getTime();}}
這樣,每次點擊圖片時都會重新加載圖片,從而實現每次點擊都有動態效果的效果。
親測有效~~~