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

Taro+vue3 實(shí)現(xiàn)滑動(dòng)列表 時(shí)切換電影

這篇具有很好參考價(jià)值的文章主要介紹了Taro+vue3 實(shí)現(xiàn)滑動(dòng)列表 時(shí)切換電影。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Taro+vue3 實(shí)現(xiàn)滑動(dòng)列表 時(shí)切換電影,taro,javascript,前端

<template>
    <div class="movie-list-component">
        <view class="list-container">
            <scroll-view id="contentScroll" class="scroll-view" :scroll-with-animation="true" :scroll-left="scrollLeft"
                :scroll-x="true" style="width: 100%;" @scroll="onScroll" @touchstart="onTouchStart" @touchend="onTouchEnd">
                <div class="movie-item seat"></div>
                <view :data-id="item.id" @click="selectMovie" :id="`movieItem${item.id}`" class="movie-item"
                    :class="{ active: modelValue == item.id }" v-for="( item, index ) in  list " :key="index">
                    <div class="img-container">
                        <image class="img" :src="item?.image" alt="" />
                    </div>
                    <!-- <div class="point-container"></div> -->
                </view>
                <div class="movie-item seat1"></div>
            </scroll-view>
        </view>
    </div>
</template>
<script setup lang="ts">
import Taro from "@tarojs/taro";
import { onMounted, ref, reactive, toRefs, watch } from "vue";
const props = defineProps({
    // 子組件接收父組件傳遞過(guò)來(lái)的值
    list: {
        type: Array<any>,
        required: true,
    },
    modelValue: {
        type: Number,
        required: true,
    },
});
//使用父組件傳遞過(guò)來(lái)的值
const { list, modelValue } = toRefs(props);
const emit = defineEmits(["onchangeMovie"]);
const clientWidths = ref(0)
const isSwitchingMovie = ref(false)
onMounted(() => {

    list?.value.map((item, index) => {
        if (item.id === modelValue?.value) {
            list?.value.unshift(list?.value.splice(index, 1)[0]);
        }
    });

});
const scrollLeft = ref(0);
//選擇電影
const selectMovie = (e) => {
    isSwitchingMovie.value = true; // 點(diǎn)擊切換電影時(shí)設(shè)置為true
    let offsetLeft = e.currentTarget.offsetLeft;
    let { id } = e.currentTarget.dataset;
    if (!id) {
        id = list.value[0].id;
    }
    if (modelValue.value === id) {
        return;
    }
    emit("onchangeMovie", id);
    getRect(id, offsetLeft);
};
//滾動(dòng)事件處理函數(shù)
const onScroll = (e) => {
    if (isSwitchingMovie.value) {
        return; // 如果處于切換電影狀態(tài),不執(zhí)行滾動(dòng)事件邏輯
    }
    requestAnimationFrame(() => {
        const contentScroll = Taro.createSelectorQuery();
        contentScroll.select("#contentScroll").boundingClientRect();
        contentScroll.exec((res) => {
            const clientWidth = res[0].width;
            clientWidths.value = clientWidth;
            // 執(zhí)行其他邏輯
        });

        const { scrollLeft } = e.detail;
        const currentIndex = Math.round(scrollLeft / (clientWidths.value / 4));
        const index = currentIndex >= list.value.length ? list.value.length - 1 : currentIndex;
        const id = list.value[index]?.id;

        if (modelValue.value !== id) {
            emit("onchangeMovie", id);
        }
    });
};
// 觸摸開(kāi)始事件,用于標(biāo)記點(diǎn)擊切換電影狀態(tài)開(kāi)始
const onTouchStart = () => {
    isSwitchingMovie.value = true;
};

// 觸摸結(jié)束事件,用于標(biāo)記點(diǎn)擊切換電影狀態(tài)結(jié)束
const onTouchEnd = () => {

    isSwitchingMovie.value = false;

};
//計(jì)算電影item的偏移量
const getRect = async (id, offsetLeft) => {

    const eleId = `#movieItem${id}`;

    const contentScrollWidth: any = await getContentScrollWidth("#contentScroll");
    const query = Taro.createSelectorQuery();
    query.select(eleId).boundingClientRect();
    query.selectViewport().scrollOffset();
    query.exec(async (res) => {

        //獲取item的寬度de 一半
        const subhalfwidth = res[0].width / 2;
        //需要scrollview 移動(dòng)的距離是
        const juli = offsetLeft - contentScrollWidth / 2 + subhalfwidth;
        scrollLeft.value = juli;
    });
};
// 獲取ScrollView的寬度
const getContentScrollWidth = (ele) => {
    return new Promise((resolve) => {
        const query = Taro.createSelectorQuery();
        query.select(ele).boundingClientRect();
        query.selectViewport().scrollOffset();
        query.exec((res) => {
            const width = res[0].width;
            resolve(width);
        });
    });
};
</script>
<style lang="scss">
.movie-list-component {
    display: flex;
    flex-direction: column;

    .list-container {
        display: flex;
        flex-direction: column;
        justify-content: center;
        height: 350px;

        .scroll-view {
            width: 100%;
            height: 320px;
            white-space: nowrap;
            position: relative;

            .movie-item {
                display: inline-block;
                position: relative;
                margin-left: 25px;
                // display: flex;
                // justify-content: center;
                // align-items: center;
                border-radius: 18px;
                // overflow: hidden;
                width: 146px;
                height: 218px;
                transition: width 0.8s;
                transition: height 0.8s;

                .img-container {
                    border-radius: 8px;
                    width: 100%;
                    height: 100%;
                    overflow: hidden;
                    position: relative;
                    z-index: 2;
                    // border: 5px #ffffff solid;

                    .img {
                        width: 100%;
                        height: 100%;
                    }
                }
            }

            .movie-item.active {
                // width: 180px !important;
                // height: 270px !important;
                transform: scale(1.1);
                transition: transform 0.8s ease;


                .img-container {
                    border-radius: 10px;
                    border: 3px #ffffff solid;
                }

                // .point-container {
                //     z-index: 1;
                //     height: 30px;
                //     width: 30px;
                //     background: #5232B7;
                //     // border-radius: 7px;
                //     position: absolute;
                //     bottom: -15px;
                //     left: 50%;
                //     margin-left: -15px;
                //     transform: rotate(45deg);
                // }
            }

            .seat {
                display: inline-block;
                width: 50%;
                height: 290px;
                margin-left: -100px;
            }

            .seat1 {
                display: inline-block;
                width: 36%;
                height: 290px;
                // margin-left: 50px;
            }
        }
    }
} 
</style> 

以上代碼是滑動(dòng)的組件?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-794376.html

到了這里,關(guān)于Taro+vue3 實(shí)現(xiàn)滑動(dòng)列表 時(shí)切換電影的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(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)文章

  • vue3+taro+Nutui 開(kāi)發(fā)小程序(二)

    vue3+taro+Nutui 開(kāi)發(fā)小程序(二)

    上一篇我們初始化了小程序項(xiàng)目,這一篇我們來(lái)整理一下框架 首先可以看到我的項(xiàng)目整理框架是這樣的: ?components:這里存放封裝的組件 custom-tab-bar:這里存放自己封裝的自定義tabbar interface:這里放置了Ts的一些基本泛型,不用Ts的可以忽略 pages:這里放置了小程序的所有頁(yè)面

    2024年02月16日
    瀏覽(27)
  • Taro+Vue3 小程序引入echarts表

    Taro+Vue3 小程序引入echarts表

    背景:根據(jù)需求在一個(gè)報(bào)告界面需要展示不同的echarts表來(lái)使數(shù)據(jù)更友好的顯示。 效果如下: 一.taro支持echarts 官方說(shuō)明:Taro 文檔支持引用小程序端第三方組件庫(kù) 物料文檔:Taro 物料市場(chǎng) | 讓每一個(gè)輪子產(chǎn)生價(jià)值 二.引入echarts-for-weixin插件 github地址: https://github.com/ecomfe/echar

    2024年02月13日
    瀏覽(22)
  • vue3+taro+Nutui 開(kāi)發(fā)小程序(一)

    vue3+taro+Nutui 開(kāi)發(fā)小程序(一)

    前言:最近在調(diào)研開(kāi)發(fā)小程序,發(fā)現(xiàn)現(xiàn)在taro框架逐漸成熟,能完美地使用vue3來(lái)進(jìn)行開(kāi)發(fā),調(diào)研中發(fā)現(xiàn)京東的Nutui也不錯(cuò)所以準(zhǔn)備寫(xiě)一個(gè)由0到1的vue3+taro+Nutui的小程序。 這篇我們首先搭建一個(gè)框架: vscode插件準(zhǔn)備環(huán)節(jié): 目前我用到的插件如下: Eslint? ?用來(lái)vue格式化代碼的

    2024年02月08日
    瀏覽(23)
  • taro vue3 ts nut-ui 項(xiàng)目

    taro vue3 ts nut-ui 項(xiàng)目

    查看 Taro 全部版本信息? 可以使用? npm info ?查看 Taro 版本信息,在這里你可以看到當(dāng)前最新版本 使用命令創(chuàng)建模板項(xiàng)目: taro init 項(xiàng)目名 微信小程序自定義 TabBar 先安裝 cnpm install pinia 以便解決 小程序的 頁(yè)面首次加載 在?app.config.js 中設(shè)置 在? src 目錄 下 pages 文件夾,在里

    2024年02月06日
    瀏覽(43)
  • Taro+Vue3開(kāi)發(fā)微信小程序的分享好友功能

    Taro+Vue3開(kāi)發(fā)微信小程序的分享好友功能

    1、背景:使用taro框架和vue3框架開(kāi)發(fā)小程序,實(shí)現(xiàn)一個(gè)把pdf文件直接分享給微信好友。 一開(kāi)始看taro文檔理解有偏差,導(dǎo)致分享出去的文件是個(gè)app的小程序連接。如下圖 ?實(shí)現(xiàn)代碼如下: 后續(xù)仔細(xì)查看taro文檔, Taro 文檔,發(fā)現(xiàn)這種寫(xiě)法是個(gè)頁(yè)面組件,轉(zhuǎn)發(fā)出去的是個(gè)小程序,

    2024年02月12日
    瀏覽(28)
  • taro+vue3 搭建一套框架,適用于微信小程序和H5

    安裝 Taro。可以在終端輸入以下命令進(jìn)行安裝: 創(chuàng)建項(xiàng)目。使用以下命令創(chuàng)建 Taro+Vue3 項(xiàng)目: 其中,myApp 是項(xiàng)目名稱(chēng)。 進(jìn)入項(xiàng)目并啟動(dòng)。使用以下命令進(jìn)入項(xiàng)目并啟動(dòng): 注意,需要先進(jìn)入對(duì)應(yīng)的目錄再啟動(dòng)。 編寫(xiě)代碼。在 src 目錄下編寫(xiě)代碼,可以像使用 Vue 開(kāi)發(fā) Web 應(yīng)用程

    2024年02月10日
    瀏覽(76)
  • taro 微信小程序?qū)懟瑒?dòng)刪除左滑

    taro 微信小程序?qū)懟瑒?dòng)刪除左滑

    思路: css寫(xiě)布局,增加過(guò)渡效果,邏輯控制哪一條展開(kāi),展開(kāi)項(xiàng)增加展開(kāi)樣式,滑動(dòng)判斷

    2024年02月10日
    瀏覽(43)
  • vue3 setup+Taro3 調(diào)用原生小程序自定義年月日時(shí)分多列選擇器,NutUI改造

    vue3 setup+Taro3 調(diào)用原生小程序自定義年月日時(shí)分多列選擇器,NutUI改造

    NutUI 有日期時(shí)間選擇器,但是滑動(dòng)效果太差,卡頓明顯。換成 原生小程序 很順暢 上代碼: 若需要自定義年開(kāi)始時(shí)間,見(jiàn) initColumn 方法 如作為組件,通過(guò)父級(jí)傳遞,可使用:

    2024年02月13日
    瀏覽(20)
  • Taro + vue3 + js + nutUI 框架中自定義tabbar的組件封裝以及頁(yè)面跳轉(zhuǎn)的邏輯

    1.需求: ? 在H5 中需要封裝一個(gè)自定義的tabbar 菜單跳轉(zhuǎn) 通過(guò)nut-ui 進(jìn)行二次封裝 2. 注意點(diǎn) ? H5 中原生的tabbar 在ios 中會(huì)出現(xiàn)問(wèn)題 所以進(jìn)行 封裝tabbar 3. 代碼操作 首先全部的代碼? 4.解析 tabList: 菜單的內(nèi)容數(shù)組? 根據(jù)自己菜單的數(shù)量 來(lái)決定 const tabList = reactivemenu[]([ ? ? { ? ?

    2024年04月17日
    瀏覽(96)
  • 一文幫你搞定H5、小程序、Taro長(zhǎng)列表曝光埋點(diǎn)

    一文幫你搞定H5、小程序、Taro長(zhǎng)列表曝光埋點(diǎn)

    對(duì)于很多前端同學(xué)來(lái)說(shuō),“埋點(diǎn)”常常是一個(gè)不愿面對(duì)卻又無(wú)法逃避的話(huà)題。為什么這么說(shuō)呢,相信很多前端同學(xué)都深有體會(huì):首先埋點(diǎn)這個(gè)事基本是前端“獨(dú)享”的,服務(wù)端基本不太涉及;其次添加埋點(diǎn),往往看起來(lái)很簡(jiǎn)單但實(shí)際做起來(lái)很麻煩,很多時(shí)候?yàn)榱双@取一些埋點(diǎn)

    2024年02月16日
    瀏覽(17)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包