123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- <template>
- <view class="multiple-options">
- <view class="list">
- <block v-for="(item, index) in listData" :key="index">
- <view
- class="list__item"
- :class="[`tn-main-gradient-${tuniaoColorList[item.bgColorIndex]}--light`]"
- @tap="navOptionsPage(item.url)"
- >
- <view class="list__content">
- <view class="list__content__title">{{ item.title }}</view>
- <view class="list__content__desc">{{ item.desc }}</view>
- </view>
- <view class="list__icon">
- <view class="list__icon__main" :class="[`tn-icon-${item.mainIcon}`, `tn-main-gradient-${tuniaoColorList[item.bgColorIndex]}`]"></view>
- <view class="list__icon__sub" :class="[`tn-icon-${item.subIcon}`, `tn-main-gradient-${tuniaoColorList[item.bgColorIndex]}`]"></view>
- </view>
- </view>
- </block>
- </view>
- </view>
- </template>
- <script>
- export default {
- name: 'multiple-options-demo',
- props: {
- // 显示的列表数据
- list: {
- type: Array,
- default() {
- return []
- }
- }
- },
- data() {
- return {
- // 图鸟颜色列表
- tuniaoColorList: [
- 'red',
- 'purplered',
- 'purple',
- 'bluepurple',
- 'aquablue',
- 'blue',
- 'indigo',
- 'cyan',
- 'teal',
- 'green',
- 'orange',
- 'orangered'
- ],
- listData: []
- }
- },
- watch: {
- list(val) {
- this.initList()
- }
- },
- created() {
- this.initList()
- },
- methods: {
- // 初始化列表数据
- initList() {
- // 给列表添加背景颜色数据
- this.listData = this.list.map((item, index) => {
- item.bgColorIndex = this.getBgNum()
- item.mainIcon = item?.mainIcon || 'computer-fill'
- item.subIcon = item?.subIcon || 'share'
- return item
- })
- },
- // 跳转到对应的选项页面
- navOptionsPage(url) {
- uni.navigateTo({
- url: url
- })
- },
- // 获取酷炫背景随机数
- getBgNum() {
- return Math.floor((Math.random() * this.tuniaoColorList.length))
- }
- }
- }
- </script>
- <style lang="scss" scoped>
-
- .list {
-
- &__item {
- display: flex;
- flex-direction: row;
- align-items: center;
- justify-content: space-between;
- width: calc(100% - 60rpx);
- margin: 108rpx 30rpx 0rpx 30rpx;
- box-shadow: 0rpx 10rpx 50rpx 0rpx rgba(0, 3, 72, 0.1);
- border-radius: 20rpx;
- }
-
- &__content {
- flex: 1;
- // color: $tn-font-color;
- margin: 34rpx 0rpx 27rpx 37rpx;
-
- &__title {
- font-size: 36rpx;
- font-weight: bold;
- margin-bottom: 12rpx;
- }
- &__desc {
- font-size: 28rpx;
- }
- }
-
- &__icon {
- flex: 1;
- margin-right: 26rpx;
- position: relative;
-
- &__main, &__sub {
- -webkit-background-clip: text;
- color: transparent;
- position: absolute;
- transition: transform 0.25s ease;
- }
-
- &__main {
- font-size: 200rpx;
- width: 190rpx;
- line-height: 200rpx;
- top: 0;
- right: 0rpx;
- transform: translateY(-60%);
- }
- &__sub {
- font-size: 70rpx;
- top: 0;
- right: 175rpx;
- transform: translateY(-5rpx);
- }
- }
- }
- </style>
|