vue实现卡片翻转轮播展示
vue卡片翻转轮播展示,同时在翻转时切换数据,供大家参考,具体内容如下
效果及代码
代码:
<template> <div class="list-container"> <div class="reason" v-if="list1.length > 0 || list2.length > 0"> <div class="logo"> <svg-icon class="center-svg" icon-class="centerLogo"></svg-icon> <div class="echart"> <echart :option="option" echartId="roadP" /> </div> </div> <RoadComponent :list="list1[0]" :style="{ display: show1 }"></RoadComponent> <RoadComponent :list="list2[0]" :style="{ display: show2 }"></RoadComponent> <RoadComponent :list="list1[1]" :style="{ display: show3 }"></RoadComponent> <RoadComponent :list="list2[1]" :style="{ display: show4 }"></RoadComponent> <RoadComponent :list="list1[2]" :style="{ display: show5 }"></RoadComponent> <RoadComponent :list="list2[2]" :style="{ display: show6 }"></RoadComponent> </div> </div> </template> <script> import { defineComponent, inject, onMounted, reactive, onUnmounted, toRefs } from 'vue'; import { congestionPredict } from '@/apis/fullView'; import echart from '@/components/common/echart'; import '@/assets/icons/fullView/westToEast.svg'; import '@/assets/icons/fullView/eastToWest.svg'; import '@/assets/icons/fullView/northToSouth.svg'; import '@/assets/icons/fullView/southToNorth.svg'; import '@/assets/icons/fullView/centerLogo.svg'; import RoadComponent from '@/views/fullView/left/RoadComponent'; export default defineComponent({ name: 'RoadP', components: { echart, RoadComponent }, setup() { let echarts = inject('ec'); const dataMap = reactive({ interval: null, interval1: null, list1: [], list2: [], list: [], option: {}, timeout: 10, show1: 'block', show2: 'none', show3: 'block', show4: 'none', show5: 'block', show6: 'none', }); onMounted(() => { getData(); dataMap.interval = setInterval(() => { getData(); }, 60 * 1000); dataMap.interval1 = setInterval(() => { if (dataMap.timeout > 8 && dataMap.timeout < 11) { dataMap.timeout = dataMap.timeout - 1; dataMap.show1 = 'block'; dataMap.show3 = 'block'; dataMap.show5 = 'block'; dataMap.show2 = 'none'; dataMap.show4 = 'none'; dataMap.show6 = 'none'; } else if (dataMap.timeout === 8) { dataMap.timeout = dataMap.timeout - 1; dataMap.show1 = 'none'; dataMap.show3 = 'block'; dataMap.show5 = 'block'; dataMap.show2 = 'block'; dataMap.show4 = 'none'; dataMap.show6 = 'none'; } else if (dataMap.timeout === 7) { dataMap.timeout = dataMap.timeout - 1; dataMap.show1 = 'none'; dataMap.show3 = 'none'; dataMap.show5 = 'block'; dataMap.show2 = 'block'; dataMap.show4 = 'block'; dataMap.show6 = 'none'; } else if (dataMap.timeout < 7 && dataMap.timeout > 3) { dataMap.timeout = dataMap.timeout - 1; dataMap.show1 = 'none'; dataMap.show3 = 'none'; dataMap.show5 = 'none'; dataMap.show2 = 'block'; dataMap.show4 = 'block'; dataMap.show6 = 'block'; } else if (dataMap.timeout === 3) { dataMap.timeout = dataMap.timeout - 1; dataMap.show1 = 'block'; dataMap.show3 = 'none'; dataMap.show5 = 'none'; dataMap.show2 = 'none'; dataMap.show4 = 'block'; dataMap.show6 = 'block'; } else if (dataMap.timeout === 2) { dataMap.timeout = dataMap.timeout - 1; dataMap.show1 = 'block'; dataMap.show3 = 'block'; dataMap.show5 = 'none'; dataMap.show2 = 'none'; dataMap.show4 = 'none'; dataMap.show6 = 'block'; } else if (dataMap.timeout === 1) { dataMap.timeout = dataMap.timeout - 1; dataMap.show1 = 'block'; dataMap.show3 = 'block'; dataMap.show5 = 'block'; dataMap.show2 = 'none'; dataMap.show4 = 'none'; dataMap.show6 = 'none'; } else { dataMap.timeout = 10; } }, 1000); }); onUnmounted(() => { clearInterval(dataMap.interval); clearInterval(dataMap.interval1); }); const getData = () => { congestionPredict() .then((res) => { if (res && res.code === 0 && res.data) { dataMap.list1 = []; dataMap.list2 = []; for (let i = 0; i < 6; i = i + 2) { dataMap.list1.push([ { name: res.data[i].name, direction: res.data[i].direction, value: res.data[i].index.toFixed(1), icon: res.data[i].englishDirection, }, { name: res.data[i + 1].name, direction: res.data[i + 1].direction, value: res.data[i + 1].index.toFixed(1), icon: res.data[i + 1].englishDirection, }, ]); } for (let j = res.data.length - 1; j > res.data.length - 6; j = j - 2) { dataMap.list2.push([ { name: res.data[j].name, direction: res.data[j].direction, value: res.data[j].index.toFixed(1), icon: res.data[j].englishDirection, }, { name: res.data[j - 1].name, direction: res.data[j - 1].direction, value: res.data[j - 1].index.toFixed(1), icon: res.data[j - 1].englishDirection, }, ]); } } }) .catch((err) => { console.log(err); }) .finally(() => { dataMap.option = getOption(); }); }; const getOption = () => { return { series: [ { type: 'liquidFill', name: '', radius: '85%', center: ['50%', '45%'], data: [0.55, 0.5, 0.5], color: ['rgba(0,118,255,0.5)', 'rgba(0,102,255,0.5)', 'rgba(0,185,255,0.6)'], outline: { show: false, }, backgroundStyle: { color: 'transparent', borderColor: 'transparent', borderWidth: 1, shadowColor: 'transparent', shadowBlur: 0, }, label: { show: false, }, }, ], }; }; return { ...toRefs(dataMap), }; }, }); </script> <style scoped lang="less"> .list-container { width: 100%; height: 280px; } .reason { width: 696px; margin: 16px auto; height: 228px; position: relative; list-style: none; .logo { width: 150px; height: 150px; position: absolute; left: 0; right: 0; top: 0; bottom: 0; margin: auto; background: url('~@/assets/img/fullView/centerGround.dynamic.png'); background-size: 100% 100%; } .echart { width: 158px; height: 158px; position: absolute; left: -4px; top: 4px; } } .center-svg { width: 90px; height: 100px; position: absolute; left: 30px; top: 25px; z-index: 15; } </style>
卡片组件
<template> <div class="goBack" v-if="list.length > 0"> <div class="top"> <svg-icon class="svg" :icon-class="list[0].icon"></svg-icon> <div> <div> <p class="span-container text-overflow">{{ list[0].name }}</p> <p class="index" :style="{ color: switchColor(list[0].value) }">{{ list[0].value }}</p> </div> <div> <p class="span-container text-overflow">{{ list[1].name }}</p> <p class="index" :style="{ color: switchColor(list[1].value) }">{{ list[1].value }}</p> </div> </div> <svg-icon class="svg" :icon-class="list[1].icon"></svg-icon> </div> </div> </template> <script> import { defineComponent } from 'vue'; export default defineComponent({ name: 'RoadComponent', props: { list: {}, }, setup() { const switchColor = (value) => { if (value > 0 && value <= 2) { return '#00DBEB'; } else if (value > 2 && value <= 3) { return '#FFD200'; } else if (value > 3 && value <= 4) { return '#FF7309'; } else if (value > 4 && value <= 5) { return '#FF0000'; } }; return { switchColor, }; }, }); </script> <style lang="less" scoped> .goBack { transform-style: preserve-3d; animation: back 0.5s linear 1; } .back:hover { animation-play-state: paused; } @keyframes back { 0% { transform: rotateZ(0deg) rotateY(0deg) rotateX(-90deg); } 100% { transform: rotateZ(0deg) rotateY(0deg) rotateX(0deg); } } .span-container { width: 150px; margin: 0 0 5px 5px; color: var(--text-blue); font-size: var(--font-traffic-size); } .svg { width: 41px; height: 41px; } .top { display: flex; flex-wrap: nowrap; padding: 0 20px; margin: 0 0 14px 0; justify-content: space-between; align-items: center; height: 68px; border-radius: 10px; opacity: 0.9; background: linear-gradient( 89deg, rgba(0, 76, 169, 0.5) 0%, rgba(0, 76, 169, 0) 46%, rgba(0, 76, 169, 0) 49%, rgba(0, 76, 169, 0) 52%, rgba(0, 76, 169, 0.5) 100% ); } .top > div { width: 640px; display: flex; text-align: center; align-items: center; flex-wrap: nowrap; justify-content: space-between; & > div { width: 160px; span { margin-left: 15px; } } .index { width: 155px; height: 28px; font-size: var(--font-size-chart-title); text-align: center; margin: 0; line-height: 28px; } } </style>
关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。
精彩专题分享:jQuery图片轮播 JavaScript图片轮播 Bootstrap图片轮播
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
赞 (0)