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
(18 intermediate revisions by the same user not shown)
Line 1: Line 1:
<noinclude>
<noinclude>
== 参数说明 ==
* boxid 对象id, 默认值: home-tab, 当需要在同一个页面上显示多个组件时,需要保证boxid唯一
* themeColor 主题颜色, 默认值: #36a5e8
* tabs 分栏名称列表
* tabContents 分栏内容列表
** title 要跳转的文档名称
** subtitle: 子标题,
** coverimg 封面图片, 默认显示, 失去鼠标焦点时显示
** backimg 背面图片, 获取到鼠标焦点时显示
== 用法 ==
== 用法 ==
  <pre>
<pre><nowiki>
    <nowiki>
{{#widget:Home
    {{#widget:Home
| tabs = ["HDMI显示屏", "MHS-series显示屏", "GPIO显示屏"]
    | tabs = ["HDMI显示屏", "MHS-series显示屏", "GPIO显示屏"]
| tabContents = [
    | tabContents = [
    [
        [
      {  
          {  
        title: "3.5寸HDMI显示屏",  
            title: "3.5寸HDMI显示屏",  
        subtitle: "子标题",
            coverimg: "http://www.lcdwiki.com/images/thumb/0/09/Main_MPI3508.jpg/200px-Main_MPI3508.jpg",  
        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" },     
        backimg: "http://www.lcdwiki.com/zh/images/thumb/2/21/MPI3508-01.jpg/300px-MPI3508-01.jpg" },     
        ],
    ],
        [
    [
          {  
      {  
            title: "3.5寸HDMI显示屏",  
        title: "3.5寸HDMI显示屏",  
            coverimg: "http://www.lcdwiki.com/images/thumb/0/09/Main_MPI3508.jpg/200px-Main_MPI3508.jpg",  
        subtitle: "子标题",
            backimg: "http://www.lcdwiki.com/zh/images/thumb/2/21/MPI3508-01.jpg/300px-MPI3508-01.jpg" },     
        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显示屏",  
      {  
            coverimg: "http://www.lcdwiki.com/images/thumb/0/09/Main_MPI3508.jpg/200px-Main_MPI3508.jpg",  
        title: "3.5寸HDMI显示屏",  
            backimg: "http://www.lcdwiki.com/zh/images/thumb/2/21/MPI3508-01.jpg/300px-MPI3508-01.jpg" },     
        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" },     
    }}
    ],
    </nowiki>
  ]
  </pre>
}}
== 参数说明 ==
</nowiki></pre>
   * tabs 分栏名称列表
== 效果展示 ==
  * tabContents 分栏内容列表
{{#widget:Home
   ** title 要跳转的文档名称
| tabs = ["HDMI显示屏", "MHS-series显示屏", "GPIO显示屏"]
  ** coverimg 封面图片, 默认显示, 失去鼠标焦点时显示
| tabContents = [
   ** backimg 背面图片, 获取到鼠标焦点时显示
    [
      {
        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"
      }, 
      {
        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"
      },
        {
        title: "3.5寸HDMI显示屏",
        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显示屏",
        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显示屏",
        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显示屏",
        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"
      },   
    ],
  ]
}}
{{#widget:Home
| boxid = demo1
| tabs = ["HDMI显示屏", "MHS-series显示屏"]
| themeColor = #bc1d46
| 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"
      }, 
      {
        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"
      },
        {
        title: "3.5寸HDMI显示屏",  
        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显示屏",
        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显示屏",
        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"
      },  
    ],
  ]
}}
</noinclude>
</noinclude>
<includeonly>
<includeonly>
<onlyinclude>
<onlyinclude>
  <html>
<html>
    <div id="app" style="display: none">
  <div  
      <v-app>
    id="<!--{$boxid|default:"home-tab"}-->"
        <v-main>
    class="v-application v-application--is-ltr theme--light"
          <v-container>
    style="display: none;"
            <v-tabs v-model="tab" right show-arrows>
  >
              <v-tab v-for="(tabName, index) in tabs" :key="index">{{
    <v-container>
                tabName
      <v-tabs  
              }}</v-tab>
        dark
            </v-tabs>
        v-model="tab"  
            <v-tabs-items v-model="tab">
        show-arrows
              <v-tab-item v-for="(content, index) in tabContents" :key="index">
        grow
                <div class="d-flex flex-wrap justify-space-around">
        center-active
                  <v-card v-for="(item, idx) in content" :key="idx" flat>
        hide-slider
                    <v-img
        active-class="active-tab"
                      dark
        :background-color="themeColor"
                      :src="getImageUrl(item)"
      >
                      :aspect-ratio="16/9"
        <v-tab v-for="(tabName, index) in tabs" :key="index" style="text-transform: none;">
                      width="265"
          {{tabName}}
                      class="grey darken-4"
        </v-tab>
                      @mouseover="setHoveredItem(item)"
      </v-tabs>
                      @mouseout="resetHoveredItem()"
      <v-tabs-items v-model="tab">
                    ></v-img>
        <v-tab-item v-for="(content, index) in tabContents" :key="index">
                    <v-card-subtitle style="text-align: center">
        <v-container>
                      <a
          <v-row no-gutters>
                        :href="'/index.php?title=' + encodeURIComponent(item.title)"
            <v-col v-for="(item, idx) in content" :key="idx"
                        >{{ item.title }}</a
            cols="6" sm="6" md="4" lg="3" xl="3"
                      >
            >
                    </v-card-subtitle>
              <a :href="baseURL() + encodeURIComponent(item.title)">
                  </v-card>
                <v-card class="ma-1 ma-md-2 ma-lg-3 ma-xl-3" elevation=1>
                </div>
                  <v-img
              </v-tab-item>
                    contain
            </v-tabs-items>
                    style="background-color: white;"
                    :src="getImageUrl(item)"
                    :aspect-ratio="1/1"
                    @mouseover="setHoveredItem(item)"
                    @mouseout="resetHoveredItem()"
                  ></v-img>
                  <div class="home-box-item-title">{{ item.title }}</div>
                  <div class="home-box-item-subtitle">{{ item.subtitle }}</div>
                </v-card>
              </a>
            <v-col/>
          </v-row>
           </v-container>
           </v-container>
         </v-main>
         </v-tab-item>
       </v-app>
       </v-tabs-items>
     </div>
     </v-container>
  </div>
  <script src="/res/Common/js/vue.min.js"></script>
  <script src="/res/Common/js/vuetify.min.js"></script>
  <script>
    if (typeof HomeBoxPool == "undefined") {
        HomeBoxPool = new Map();
    }
    HomeBoxPool["<!--{$boxid|default:"home-tab"}-->"] = setInterval(() => {
      if (typeof Vuetify !== "undefined" && typeof Vue !== "undefined") {
        clearInterval(HomeBoxPool["<!--{$boxid|default:"home-tab"}-->"]);
        let appDom = document.getElementById("<!--{$boxid|default:"home-tab"}-->");
        appDom.style.display = 'block';
        new Vue({
          el: "#<!--{$boxid|default:"home-tab"}-->",
          vuetify: new Vuetify(),
          mounted() {
              setTimeout(()=>{this.preloadBackimg()}, 5000);
          },
          methods: {
            setHoveredItem(item) {
              this.hoveredItem = item;
            },
            resetHoveredItem() {
              this.hoveredItem = null;
            },
            getImageUrl(item) {
              if (this.$vuetify.breakpoint.mdAndUp && this.hoveredItem === item && item.backimg) {
                return item.backimg;
              }
              return item.coverimg;
            },
            baseURL(){
              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;
                  }
                })
              })
            }
          },
          data: {
            themeColor: "<!--{$themeColor|default:"#36a5e8"}-->",
            tab: null,
            tabs: <!--{$tabs}-->,
            tabContents: <!--{$tabContents}-->,
            hoveredItem: null,
          },
        });
 
      }
    }, 50);
  </script>
  <style scoped>
    .home-box-item-title, .home-box-item-subtitle {
      text-align: center;
      font-size: 14px; /* 默认字体大小 */
      white-space: nowrap;        /* 防止文本换行 */
      overflow: hidden;          /* 隐藏超出范围的文本 */
      text-overflow: ellipsis;    /* 使用省略号表示超出文本 */
      max-width: 100%;            /* 设置最大宽度 */
    }


     <script>
     .home-box-item-title {
      window.onload=function () {
      font-weight: bold;
            let appDom = document.getElementById('app');
      color: #313131
            appDom.style.display = 'block';
    }
            new Vue({
 
              el: "#app",
    .home-box-item-subtitle {
              vuetify: new Vuetify(),
      color: #666666
              methods: {
    }
                setHoveredItem(item) {
 
                  this.hoveredItem = item;
 
                },
    @media (min-width: 960px) {
                resetHoveredItem() {
      .home-box-item-title, .home-box-item-subtitle {
                  this.hoveredItem = null;
        font-size: 16px; /* 中屏幕及以上 */
                },
      }
                getImageUrl(item) {
    }
                  if (this.hoveredItem === item) {
 
                    if (item.backimg) {
    @media (min-width: 1280px) {
                      return item.backimg;
      .home-box-item-title, .home-box-item-subtitle{
                    }
        font-size: 18px; /* 大屏幕及以上 */
                  }
      }
                  return item.coverimg;
    }
                },
 
              },
    .active-tab {
              data: {
      font-weight: bold;
                tab: null,
      font-size: 18px;
                tabs: <!--{$tabs}-->,
    }
                tabContents: <!--{$tabContents}-->,
 
                hoveredItem: null,
    .active-tab::after {
              },
      content: '';
            });
      position: absolute;
          }
      top: 0;
    </script>
      left: 0;
  </html>
      width: 100%;
      height: 100%;
      background-color: rgba(255, 255, 255, 0.3); /* 透明白色 */
      pointer-events: none; /* 让蒙版不影响鼠标事件 */
    }
  </style>
</html>
</onlyinclude>
</onlyinclude>
</includeonly>
</includeonly>

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" },    
    ],
  ]
}}

效果展示