国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

uni-app小程序折疊3D輪播圖效果實(shí)現(xiàn)。

這篇具有很好參考價(jià)值的文章主要介紹了uni-app小程序折疊3D輪播圖效果實(shí)現(xiàn)。。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

uni-app封裝折疊輪播組件

先來看效果圖
uni-app小程序折疊3D輪播圖效果實(shí)現(xiàn)。

實(shí)現(xiàn)原理:
通過小程序的觸摸事件,來控制圖片數(shù)組的變化實(shí)現(xiàn)動(dòng)態(tài)樣式;來改變圖片的樣式。

貼上輪播組件完整代碼

<template>
	<view :style="{ height: height+'px' }" class="box">
		<view class="swiper-container">
			<view 
				class="swiper-item" 
				v-for="(item, index) in list" :key="index"
	            @tap="imageTap(item)"
	            @touchstart="touchStart" 
	            @touchend="touchEnd"
				:style="{filter:styleList[index].filter, transform: styleList[index].transform, zIndex: styleList[index].zIndex, opacity: styleList[index].opacity,display:styleList[index].display}">
				<view class="wrap">
					<image class="image" :src="item" mode="widthFix"></image>
				</view>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		props: {
			/**
			 * 圖片url列表
			 */
			list: {
				type: Array,
				default: []
			}
		},
		data() {
			return {
				/**
				 * 開始觸摸點(diǎn)坐標(biāo)
				 */
				start: {
					x: 0,
					y: 0
				},
				/**
				 * 每個(gè)item樣式列表
				 */
				styleList: [],
        height: 0
			};
		},
		created() {
			this.list.forEach((item, index) => {
				this.styleList.push(this.addStyle(index))
			})
		},
		mounted () { //防止頁面翻頁抖動(dòng)
		  setTimeout(() => {
		        const query = uni.createSelectorQuery().in(this);
		        query.select('.image').boundingClientRect(data => {
		          this.height = data.height
		        }).exec();
		      }, 1500)
		    },
		methods: {
      	imageTap(item) { // 圖片的點(diǎn)擊事件
	        this.$emit('image-tap', item)
	      },
			/**
			 * 計(jì)算每個(gè)item樣式
			 * @param {Object} idx
			 */
			addStyle(idx) {
				const len = this.list.length;
				if (idx > len / 2) {
					//這里是數(shù)組后一半的item放在左邊,平移位置由遠(yuǎn)到近,例如共6個(gè),后2個(gè)處理在這里
					var left = len - idx
					return {
						transform: 'scale(' + (1 - left / 10) + ') translate(-' + (left * 25) + '%,0px)',
						zIndex: 9999 - left,
						filter: `blur(${left==0?0:5}px)`, //濾鏡
						display: idx == len - 1 ? "block" : "none"
					}
				} else {
					//這里是數(shù)組前一半item放在右邊,平移位置由近到遠(yuǎn),例如共6個(gè),前4個(gè)處理在這里,這里第一個(gè)元素始終放在中間位置
					return {
						transform: 'scale(' + (1 - idx / 10) + ') translate(' + (idx * 25) + '%,0px)',
						zIndex: 9999 - idx,
            filter: `blur(${idx==0?0:5}px)`, //濾鏡
            display: idx > 1 ? "none" : "block"
					}
				}
			},
			/**
			 * 觸摸開始
			 * @param {Object} e
			 */
			touchStart(e) {
				this.start.x = e.changedTouches[0] ? e.changedTouches[0].pageX : 0;
				this.start.y = e.changedTouches[0] ? e.changedTouches[0].pageY : 0;
			},
			/**
			 * 觸摸結(jié)束
			 * @param {Object} e
			 */
			touchEnd(e) {
				var newStyleList = JSON.parse(JSON.stringify(this.styleList))
				let tx = e.changedTouches[0].pageX - this.start.x
				let ty = e.changedTouches[0].pageY - this.start.y
				if (Math.abs(tx) > Math.abs(ty)) {
					//左右方向滑動(dòng)
					if (tx < 0) {
						// 向左滑動(dòng)
						var last = [newStyleList.pop()]
						newStyleList = last.concat(newStyleList)
					} else if (tx > 0) {
						// 向右滑動(dòng)
						newStyleList.push(newStyleList[0])
						newStyleList.splice(0, 1)
					}
        } else {
					//這里就不處理上下方向的事件了,有此需求的同仁可以在這里寫邏輯
					//上下方向滑動(dòng)
					if (ty < 0) {
						// 向上滑動(dòng)
					} else if (ty > 0) {
						// 向下滑動(dòng)
					}
				}
				this.styleList = newStyleList
			},
			/**
			 * 當(dāng)前item點(diǎn)擊返回索引下標(biāo)
			 * @param {Object} idx
			 */
		}
	}
</script>

<style scoped lang="scss">
.box{
  .swiper-container {
		box-sizing: border-box;
		width: 100%;
		position: relative;

		.swiper-item {
			width: 100%;
			position: absolute;
			top: 0;
			left: 0;
			transition: all .5s;

			.wrap {
				padding: 2upx 44upx;
				.image {
					width: 100%;
					border-radius: 20upx;
				}
			}
		}
	}
}
	
</style>

組件使用


<template>
  <view class="tabbar-page">
    <view class="head">
      <image @tap="showBannerLink" :src="banner.imageUrl" style="width: 100%" mode="widthFix"></image>
    </view>
    <view v-if="imageList.length" class="h1">精彩呈現(xiàn)</view>
    <kevy-swiper v-if="imageList.length" :list="imageUrlList" @image-tap="imageTap"></kevy-swiper>
  </view>
</template>

<script>
  import KevySwiper from '../../components/kevy-swiper/kevy-swiper.vue'
  import store from '@/store/index'
  import crmApiService from '@/api/crmApi'

  export default {
    components: {KevySwiper},
    data () {
      return {
        imageList: [],
        banner: {}
      }
    },
    watch: {},
    computed: {
      ossUrl () {
        return this.$config.ossUrl
      },
      imageUrlList () {
        return this.imageList?this.imageList.map(item => item.imageUrl) : []
      },
      activityUrl () {
        return this.ossUrl + 'test_activity.png'
      }
    },
    methods: {
      showBannerLink() {
//        uni.navigateTo({ url: '/pages/webview/webview?url='+this.banner.linkUrl })
      },
      imageTap (url) {
        this.imageList.some(item => {
          if (item.imageUrl == url) {
            uni.navigateTo({ url: '/pages/webview/webview?url='+item.linkUrl })
            return true
          }
        })
      }
    },
    onShow () {
      this.setTabBarIndex(2)
      crmApiService.getBanners().then(res => {
        if (res.success) {
          this.banner = res.result
        } else {
          this.$tip.toast(res.message)
        }
      })
      crmApiService.getCarousels().then(res => {
        if (res.success) {
          this.imageList = res.result
        } else {
          this.$tip.toast(res.message)
        }
      })
    }
  }
</script>

<style scoped lang="scss">
  .h1 {
    font-size: 48upx;
    color: #111111;
    text-align: center;
    font-weight: 500;
    padding: 44upx 0;
  }
  .tabbar-page {
    padding-bottom: calc(env(safe-area-inset-bottom) + 68px);
    overflow-x: hidden;
  }
  .activity-wrap {
    padding: 0 44upx;
  }
</style>

如果有自動(dòng)輪播的需求,可以改造下組件加個(gè)定時(shí)器處理數(shù)組就OK了。文章來源地址http://www.zghlxwxcb.cn/news/detail-509807.html

到了這里,關(guān)于uni-app小程序折疊3D輪播圖效果實(shí)現(xiàn)。的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • uni-app/微信小程序 實(shí)現(xiàn)圖片或元素淡入淡出效果

    如題: 直接上代碼 html js部分 需要在date中聲明好 ????????????????current: 0, ?? ??? ??? ??? ?hidepic: null, ?? ??? ??? ??? ?showpic: null 因?yàn)槭且堰M(jìn)入就開始的,所以 要在生命周期中使用 最后一部別忘了,要給需要淡入淡出的元素或者圖片設(shè)置絕對(duì)定位

    2024年02月12日
    瀏覽(23)
  • 三分鐘完成小程序 uni-app、網(wǎng)站接入chatgpt實(shí)現(xiàn)聊天效果

    三分鐘完成小程序 uni-app、網(wǎng)站接入chatgpt實(shí)現(xiàn)聊天效果

    1.實(shí)現(xiàn)后臺(tái)接口 注冊(cè)laf云開發(fā)賬號(hào) https://laf.dev/ 注冊(cè)一個(gè)應(yīng)用后進(jìn)入這個(gè)頁面: 下載依賴 chatgpt 配置apiKey 寫send函數(shù) 配置你的apiKey 2.uni-app小程序代碼中 //封裝cloud 發(fā)送消息方法 微信小程序中使用 3.實(shí)現(xiàn)效果 在這里插入圖片描述

    2024年02月11日
    瀏覽(92)
  • 前端效果積累 |別具一格的3D酷炫輪播圖效果收集

    前端效果積累 |別具一格的3D酷炫輪播圖效果收集

    ?? 個(gè)人主頁 :個(gè)人主頁 ??? 推薦專欄 :前端開發(fā)成神之路 --【 這是一個(gè)為想要 入門和進(jìn)階前端開發(fā)專門開啟的精品專欄 !從 個(gè)人到商業(yè)的全套開發(fā)教程 ,實(shí)打?qū)嵉母韶浄窒?,確定不來看看? ????】 ?? 作者簡(jiǎn)介 : 從web開發(fā),再到大數(shù)據(jù)算法,踩過了無數(shù)的坑,用

    2024年02月16日
    瀏覽(25)
  • uni-app 折疊自定義

    uni-app 折疊自定義

    uni-app的uni-collapse折疊組件樣式修改 下面是修改后的樣式 修改一下uni-collapse的uni-collapse-item 設(shè)計(jì)圖樣式 修改后的樣式 就這樣吧…

    2024年02月09日
    瀏覽(31)
  • 【案例分享 | 旅游出行app】Axure制作banner輪播圖交互效果

    【案例分享 | 旅游出行app】Axure制作banner輪播圖交互效果

    哈嘍,大家好!今天給大家介紹如何使用Axure軟件制作banner輪播圖的交互效果。 【預(yù)覽地址含下載】電腦打開鏈接:https://wh9x1s.axshare.com/ 【完整案例作品預(yù)覽含下載】:https://fx2z9z.axshare.com 【視頻教程】:?jiǎn)袅▎袅ㄒ曨l 首先,讓我們來看下效果展示:進(jìn)入頁面后自動(dòng)輪播圖

    2024年02月19日
    瀏覽(24)
  • uni-app:實(shí)現(xiàn)時(shí)鐘自走(動(dòng)態(tài)時(shí)鐘效果)

    uni-app:實(shí)現(xiàn)時(shí)鐘自走(動(dòng)態(tài)時(shí)鐘效果)

    使用鉤子函數(shù)?mounted(),設(shè)置定時(shí)器,是指每秒都要去執(zhí)行時(shí)間的獲取,以至于實(shí)現(xiàn)時(shí)間自走的效果 ?mounted() { ? ? this.updateTime(); // 初始化時(shí)間 ? ? setInterval(this.updateTime, 1000); // 每秒更新時(shí)間 ? }, ?自定義方法updateTime去獲取當(dāng)前時(shí)間,并設(shè)置數(shù)據(jù) updateTime() { ? ? ? const dat

    2024年02月08日
    瀏覽(22)
  • uni-app - 文本展開 / 收起折疊功能,支持自定義樣式(當(dāng)文本內(nèi)容超出規(guī)定行數(shù)后,展開收起折疊的功能)兼容 H5 / App / 小程序且易用更容易修改的插件組件源碼,超詳細(xì)的示例代碼及注釋

    uni-app - 文本展開 / 收起折疊功能,支持自定義樣式(當(dāng)文本內(nèi)容超出規(guī)定行數(shù)后,展開收起折疊的功能)兼容 H5 / App / 小程序且易用更容易修改的插件組件源碼,超詳細(xì)的示例代碼及注釋

    網(wǎng)上的組件和教程代碼都太亂了,根本無法按照自己的需求修改,而且基本上都有兼容性和功能性 BUG。 本文實(shí)現(xiàn)了 多行文本展開與折疊組件,靈活性非常高,只完成了核心功能,可隨意自定義樣式滿足您的需求, 您只需要一鍵復(fù)制組件源碼,按照詳細(xì)的代碼示例,幾分鐘快

    2024年02月07日
    瀏覽(30)
  • uni-app小程序中做頁面滾動(dòng)底部或頂部加載效果

    uni-app小程序中做頁面滾動(dòng)底部或頂部加載效果

    在移動(dòng)應(yīng)用開發(fā)中,無限滾動(dòng)加載是一個(gè)常見的功能,用戶可以通過滑動(dòng)屏幕來加載更多的內(nèi)容,從而提高應(yīng)用的用戶體驗(yàn)。本文將介紹如何使用Uniapp實(shí)現(xiàn)無限滾動(dòng)加載的功能。 概述 我們需要實(shí)現(xiàn)的無限滾動(dòng)加載功能的具體效果如下: 當(dāng)用戶滑動(dòng)到底部時(shí),自動(dòng)加載更多的

    2024年02月08日
    瀏覽(105)
  • uni-app+uView實(shí)現(xiàn)點(diǎn)擊查看大圖片的效果
  • 微信小程序中實(shí)現(xiàn)輪播圖效果

    微信小程序中實(shí)現(xiàn)輪播圖效果

    swiper是輪播圖的外層容器,所以使用輪播圖就必須使用到swiper標(biāo)簽。 存在默認(rèn)樣式: 1 width 100% 2 height 150px 只能放置在swiper組件中。表示每一個(gè)輪播項(xiàng)。 編譯效果: 當(dāng)切換機(jī)型后,就可以方向,圖片的寬高與效果不一樣 1.分析和升級(jí)版本,解決換機(jī)型的寬高問題 ①先找出

    2024年02月11日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包