Vue card flip carousel display, while switching data when flipping, for your reference, the specific content is as follows Effects and codes Code: <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> Card Components <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( 89 degrees, 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> For tutorials on vue.js components, please click on the special vue.js component learning tutorial to learn. Wonderful topic sharing: jQuery image carousel JavaScript image carousel Bootstrap image carousel The above is the full content of this article. I hope it will be helpful for everyone’s study. I also hope that everyone will support 123WORDPRESS.COM. You may also be interested in:
|
<<: mysql 5.7.17 winx64.zip installation and configuration method graphic tutorial
>>: How to control the startup order of docker compose services
The steps of docker packaging Python environment ...
After configuring the tabBar in the WeChat applet...
In the horizontal direction, you can set the row ...
background Today, I was browsing CodePen and saw ...
We need to first combine the air quality data wit...
1. Demand A picture moves from left to right in a...
Multi-way search tree Height of a complete binary...
Today I want to summarize several very useful HTML...
I finally finished the project at hand, and the m...
Table of contents Problem scenario: Solution: 1. ...
background All of the company's servers are p...
According to null-values, the value of null in My...
【Foreword】 If you want to use ORM to operate data...
Table of contents Preface webpack-deb-server webp...
Preface Adding drag and drop functionality is a g...