效果图
Versão CSS
@keyframes _fade-in_mkmxd_1 { 0% { filtro: desfoque (20px); opacidade: 0 } para { filtro: nenhum; opacidade: 1 } } @keyframes _drop-in_mkmxd_1 { 0% { transformar: var(--transform) traduzirY(-100px) traduzirZ(400px) } para { transformar: var(--transformar) } } ._examples_mkmxd_3 { margem superior: 200px; posição: relativa; largura:1000px; altura: 640px; transição: transformação 0,15s de atenuação; filtro: sombra projetada (0 4px 18px rgba (0,0,0,1)); --largura da grade: 140px; esquerda: 50%; transformar: traduzir(-50%, 0px); } ._examples_mkmxd_3 div { posição: relativa; transição: filtro 0,25s de atenuação; animação: _fade-in_mkmxd_1 .35s cubic-bezier(.215,.61,.355,1) var(--delay) para trás; } ._examples_mkmxd_3 div:hover { filtro: sombra projetada (0 4px 8px rgba (0,0,0,.4)); índice z: 3; } ._examples_mkmxd_3 a { posição: absoluta; --transform: perspectiva(75em) girarX(0deg) girarZ(-0deg) traduzir(calc(var(--x) * 100%), calc(var(--y) * 86,67%)) escala(1,145); transformar: var(--transformar); animação: _drop-in_mkmxd_1 .35s cubic-bezier(.215,.61,.355,1) var(--delay) para trás; transição: transformação 0,25s de atenuação; /*caminho do clipe: polígono(50% 100%,93,3% 75%,93,3% 25%,50% 0%,6,7% 25%,6,7% 75%);*/ /*caminho do clipe: polígono(25% 93,3%,75% 93,3%,93,3% 50%,75% 6,7%,25% 6,7%,6,7% 50%);*/ caminho do clipe: polígono (25% 87%,75% 87%,98,3% 50%,75% 13%,25% 13%,1,7% 50%); } ._examples_mkmxd_3 a:hover{ transformar: var(--transform) traduzirZ(10px) escala(1.1); } ._examples_mkmxd_3 img { proporção: 1; ajuste ao objeto: capa; altura: 64px; largura: 64px; transformar: traduzir(-50%, 40px); esquerda: 50%; posição: absoluta; /*filtro: sombra projetada(2px 2px 0px #00BFFF);*/ } imagem { largura máxima: 100%; altura: automático; exibição: bloco; } *{ dimensionamento de caixa: caixa de borda; } .caixa de menu{ exibição: bloco; largura:200px; altura:200px; /*plano de fundo:rgba(84, 109, 231,.6);*/ fundo: roxo médio; posição: relativa; } .menu-texto{ cor: #fff; posição: absoluto! Importante; superior: 120px; esquerda: 50%; peso da fonte: negrito; transformar: traduzir(-50%, 0px); /*filtro: sombra projetada(2px 2px 0px #00BFFF);*/ tamanho da fonte: 16px; alinhamento de texto: centro; } .back-img{ largura: 64px! Importante; posição: absoluta; esquerda: 50%; transformar: traduzir(-50%, 20px); /*filtro: sombra projetada(2px 2px 0px #00BFFF);*/ } a:hover+.menu-box .menu-text{ cor: #00BFFF; filtro: sombra projetada (2px 2px 0px #fff); }
HTML
<div class="_examples_mkmxd_3" > <div v-for="(item,index) in tempData" :key="index" :style="{'--delay': item.showTime}"> <a href="#" :title="item.name" @mouseenter="menuEnter(item)" @mouseleave="menuLeave(item)" @click="menuClick(item,tempData)" :style="{' --x': item.x, '--y': item.y}"> <span class="menu-box" :style="{'background':item.color}"> <img v-if="item.name!=='上一层'" :src="item.imgPath?item.imgPath:'../img/navigation/火车站.png'" > <img v-if="item.imgPath&&item.name==='上一层'" :src="item.imgPath" class="back-img"> <span class="menu-text">{{item.name}}</span> </span> </a> </div> </div>
vue
novo Vue({ el:'#app', dados(){ retornar { menuDados:[ { x:0,y:0,caminho:'https://observablehq.com/@d3/bar-chart/2?intent=fork',nome:'A系统',img:'',filhos:[ { x:0,y:0, caminho:'https://observablehq.com/@d3/bar-chart/2?intent=fork',nome:'B系统',img:'',filhos:[ { x:0,y:0,caminho:'https://observablehq.com/@d3/bar-chart/2?intent=fork',nome:'E系统',img:'',filhos:[] }, { x:0,y:0,caminho:'https://observablehq.com/@d3/bar-chart/2?intent=fork',nome:'A系统',img:'',filhos:[] }, ] }, { x:0,y:0,caminho:'https://observablehq.com/@d3/bar-chart/2?intent=fork',nome:'C系统',img:'',filhos:[] }, { x:0,y:0,caminho:'https://observablehq.com/@d3/bar-chart/2?intent=fork',nome:'D系统',img:'',filhos:[] }, ] }, { x:0,y:0, caminho:'https://observablehq.com/@d3/bar-chart/2?intent=fork',nome:'B系统',img:'../img/navigation/火车站.png',crianças:[] }, { x:0,y:0,caminho:'https://observablehq.com/@d3/bar-chart/2?intent=fork',nome:'C系统',img:'',filhos:[] }, { x:0,y:0,caminho:'https://observablehq.com/@d3/bar-chart/2?intent=fork',nome:'D系统',img:'',filhos:[] }, { x:0,y:0,caminho:'https://observablehq.com/@d3/bar-chart/2?intent=fork',nome:'E系统',img:'',filhos:[] }, { x:0,y:0,caminho:'https://observablehq.com/@d3/bar-chart/2?intent=fork',nome:'A系统',img:'',filhos:[] }, { x:0,y:0, caminho:'https://observablehq.com/@d3/bar-chart/2?intent=fork',nome:'B系统',img:'',filhos:[] }, { x:0,y:0,caminho:'https://observablehq.com/@d3/bar-chart/2?intent=fork',nome:'C系统',img:'',filhos:[] }, { x:0,y:0,caminho:'https://observablehq.com/@d3/bar-chart/2?intent=fork',nome:'D系统',img:'',filhos:[] }, { x:0,y:0,caminho:'https://observablehq.com/@d3/bar-chart/2?intent=fork',nome:'E系统',img:'',filhos:[] }, { x:0,y:0,caminho:'https://observablehq.com/@d3/bar-chart/2?intent=fork',nome:'A系统',img:'',filhos:[] }, { x:0,y:0, caminho:'https://observablehq.com/@d3/bar-chart/2?intent=fork',nome:'B系统',img:'',filhos:[] }, { x:0,y:0,caminho:'https://observablehq.com/@d3/bar-chart/2?intent=fork',nome:'C系统',img:'',filhos:[] }, { x:0,y:0,caminho:'https://observablehq.com/@d3/bar-chart/2?intent=fork',nome:'D系统',img:'',filhos:[] }, ], dados temporários:[], cores:[ '#1874CD', '#3CB371', '#FF7F50', '#CD1076', '#CD00CD', '#1C86EE', '#00FF7F', '#FF8C00', '#EE1289', '#EE00EE', '#1E90FF', '#00FF00', '#FFA500', '#FF1493', '#FF00FF', ] } }, assistir:{ menuDados(){ this.initCoor() } }, montado(){ deixe _isso = isso this.getUser() //this.getMenuData() this.tempData = this.menuData this.initCoor() this.timer = setInterval(function(){ _this.localDate = _this.dateFormat(nova Data(),'aaaa-MM-dd hh:mm:ss') },1000) }, destruído(){ clearInterval(this.timer) }, métodos:{ menuEnter(item){ if(item.name==='上一层') retornar this.msgData = item this.msgShow = verdadeiro }, menuLeave(item){ this.msgShow = falso }, showTime(item){ if(item.name==='上一层') retornar '0s' retornar Math.random()+'s' }, menuClick(item,parant){ deixe arr =[] if(item.name==='上一层'){ this.changeMenu(item.filhos) }else if(item.filhos.length>0){ arr.push({x:0,y:0,caminho:'',nome:'上一层',imgPath:'../img/navigation/icon-返回一一级.png',filhos:parant} ) item.crianças.forEach(t=>{ arr.push(t) }) this.changeMenu(arr) }outro{ janela.localização.href = item.caminho } }, alterarMenu(dados){ deixe _isso = isso this.tempData = [] setTimeout(função(){ _this.tempData = dados _this.initCoor() },10) }, initCoor(){ this.tempData.forEach((t,index)=>{ t.color = this.colors[índice] t.showTime = this.showTime (t) if(!t.filhos){ t.crianças = [] } if(índice<5){ ty = 0 tx=índice*0,86 if(índice%2!==0){ ty += 0,5 // tx = (índice-1)+0,8 } }else if(índice>4&&índice<10){ ty = 1 tx=(índice-5)*0,86 if(índice%2===0){ ty += 0,5 // tx = (índice-1)+0,8 } }else if(índice>9&&índice<15){ ty = 2 tx=(índice-10)*0,86 if(índice%2!==0){ ty += 0,5 // tx = (índice-1)+0,8 } } }) }, } })
到此这篇关于html实现蜂窝菜单的示例代码的文章就介绍到这了,更多相关html蜂窝菜单内容请搜索dow ncodes.com以前的文章或继续浏览下面的相关文章,希望大家以后多多支持downcodes.com!