Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Widget:Home: Difference between revisions

From LCD wiki
No edit summary
No edit summary
(6 intermediate revisions by the same user not shown)
Line 179: Line 179:
     <v-container>
     <v-container>
       <v-tabs  
       <v-tabs  
        dark
         v-model="tab"  
         v-model="tab"  
         show-arrows
         show-arrows
         grow
         grow
         center-active
         center-active
         dark
         hide-slider
        active-class="active-tab"
         :background-color="themeColor"
         :background-color="themeColor"
       >
       >
         <v-tab v-for="(tabName, index) in tabs" :key="index">{{
         <v-tab v-for="(tabName, index) in tabs" :key="index" style="text-transform: none;">
          tabName
          {{tabName}}
         }}</v-tab>
         </v-tab>
       </v-tabs>
       </v-tabs>
       <v-tabs-items v-model="tab">
       <v-tabs-items v-model="tab">
Line 200: Line 202:
                 <v-card class="ma-1 ma-md-2 ma-lg-3 ma-xl-3" elevation=1>
                 <v-card class="ma-1 ma-md-2 ma-lg-3 ma-xl-3" elevation=1>
                   <v-img
                   <v-img
                     dark
                     contain
                    style="background-color: white;"
                     :src="getImageUrl(item)"
                     :src="getImageUrl(item)"
                     :aspect-ratio="1/1"
                     :aspect-ratio="1/1"
                    class="grey darken-4"
                     @mouseover="setHoveredItem(item)"
                     @mouseover="setHoveredItem(item)"
                     @mouseout="resetHoveredItem()"
                     @mouseout="resetHoveredItem()"
                    @touchstart="setHoveredItem(item)"
                    @touchend="resetHoveredItem()"
                   ></v-img>
                   ></v-img>
                   <div class="home-box-item-title">{{ item.title }}</div>
                   <div class="home-box-item-title">{{ item.title }}</div>
Line 234: Line 234:
           el: "#<!--{$boxid|default:"home-tab"}-->",
           el: "#<!--{$boxid|default:"home-tab"}-->",
           vuetify: new Vuetify(),
           vuetify: new Vuetify(),
          mounted() {
              setTimeout(()=>{this.preloadBackimg()}, 5000);
          },
           methods: {
           methods: {
             setHoveredItem(item) {
             setHoveredItem(item) {
Line 242: Line 245:
             },
             },
             getImageUrl(item) {
             getImageUrl(item) {
               if (this.hoveredItem === item) {
               if (this.$vuetify.breakpoint.mdAndUp && this.hoveredItem === item && item.backimg) {
                if (item.backimg) {
                return item.backimg;
                  return item.backimg;
                }
               }
               }
               return item.coverimg;
               return item.coverimg;
Line 251: Line 252:
             baseURL(){
             baseURL(){
               return /https?:\/\/[^\/]+\/(zh)(\/|$)/.test(window.location.href) ? '/zh/' : '/'
               return /https?:\/\/[^\/]+\/(zh)(\/|$)/.test(window.location.href) ? '/zh/' : '/'
            },
            preloadBackimg(){
              this.tabContents.forEach(contents => {
                contents.forEach(item => {
                  if (this.$vuetify.breakpoint.mdAndUp && item.backimg) {
                    console.log("Preload backimgs", item.backimg)
                    const img = new Image();
                    img.src = item.backimg;
                  }
                })
              })
             }
             }
           },
           },
Line 261: Line 273:
           },
           },
         });
         });
       }
       }
     }, 50);
     }, 50);
Line 294: Line 307:
         font-size: 18px; /* 大屏幕及以上 */
         font-size: 18px; /* 大屏幕及以上 */
       }
       }
    }
    .active-tab {
      font-weight: bold;
      font-size: 18px;
    }
    .active-tab::after {
      content: '';
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      background-color: rgba(255, 255, 255, 0.3); /* 透明白色 */
      pointer-events: none; /* 让蒙版不影响鼠标事件 */
     }
     }
   </style>
   </style>

Revision as of 15:07, 30 July 2024

参数说明

  • boxid 对象id, 默认值: home-tab, 当需要在同一个页面上显示多个组件时,需要保证boxid唯一
  • themeColor 主题颜色, 默认值: #36a5e8
  • tabs 分栏名称列表
  • tabContents 分栏内容列表
    • title 要跳转的文档名称
    • subtitle: 子标题,
    • coverimg 封面图片, 默认显示, 失去鼠标焦点时显示
    • backimg 背面图片, 获取到鼠标焦点时显示

用法

{{#widget:Home
| tabs = ["HDMI显示屏", "MHS-series显示屏", "GPIO显示屏"]
| tabContents = [
    [
      { 
        title: "3.5寸HDMI显示屏", 
        subtitle: "子标题", 
        coverimg: "http://www.lcdwiki.com/images/thumb/0/09/Main_MPI3508.jpg/200px-Main_MPI3508.jpg", 
        backimg: "http://www.lcdwiki.com/zh/images/thumb/2/21/MPI3508-01.jpg/300px-MPI3508-01.jpg" },    
    ],
    [
      { 
        title: "3.5寸HDMI显示屏", 
        subtitle: "子标题", 
        coverimg: "http://www.lcdwiki.com/images/thumb/0/09/Main_MPI3508.jpg/200px-Main_MPI3508.jpg", 
        backimg: "http://www.lcdwiki.com/zh/images/thumb/2/21/MPI3508-01.jpg/300px-MPI3508-01.jpg" },    
    ],
    [
      { 
        title: "3.5寸HDMI显示屏", 
        subtitle: "子标题", 
        coverimg: "http://www.lcdwiki.com/images/thumb/0/09/Main_MPI3508.jpg/200px-Main_MPI3508.jpg", 
        backimg: "http://www.lcdwiki.com/zh/images/thumb/2/21/MPI3508-01.jpg/300px-MPI3508-01.jpg" },    
    ],
  ]
}}

效果展示