<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>蜂窝布局</title>
<link rel="stylesheet" href="./index.css">
</head>
<body>
<div id="app">
<div class="contarner">
<div class="item"><img src="https://picsum.photos/400?1"></div>
<div class="item"><img src="https://picsum.photos/400?2"></div>
<div class="item"><img src="https://picsum.photos/400?3"></div>
<div class="item"><img src="https://picsum.photos/400?4"></div>
<div class="item"><img src="https://picsum.photos/400?5"></div>
<div class="item"><img src="https://picsum.photos/400?10"></div>
<div class="item"><img src="https://picsum.photos/400?6"></div>
<div class="item"><img src="https://picsum.photos/400?7"></div>
<div class="item"><img src="https://picsum.photos/400?8"></div>
<div class="item"><img src="https://picsum.photos/400?9"></div>
</div>
<div class="contarner">
<div class="item"><img src="https://picsum.photos/400?11"></div>
<div class="item"><img src="https://picsum.photos/400?12"></div>
<div class="item"><img src="https://picsum.photos/400?13"></div>
<div class="item"><img src="https://picsum.photos/400?14"></div>
<div class="item"><img src="https://picsum.photos/400?15"></div>
<div class="item"><img src="https://picsum.photos/400?110"></div>
<div class="item"><img src="https://picsum.photos/400?16"></div>
<div class="item"><img src="https://picsum.photos/400?17"></div>
<div class="item"><img src="https://picsum.photos/400?18"></div>
<div class="item"><img src="https://picsum.photos/400?19"></div>
</div>
<div class="contarner">
<div class="item"><img src="https://picsum.photos/400?21"></div>
<div class="item"><img src="https://picsum.photos/400?22"></div>
<div class="item"><img src="https://picsum.photos/400?23"></div>
<div class="item"><img src="https://picsum.photos/400?24"></div>
<div class="item"><img src="https://picsum.photos/400?25"></div>
<div class="item"><img src="https://picsum.photos/400?210"></div>
<div class="item"><img src="https://picsum.photos/400?26"></div>
<div class="item"><img src="https://picsum.photos/400?27"></div>
<div class="item"><img src="https://picsum.photos/400?28"></div>
<div class="item"><img src="https://picsum.photos/400?29"></div>
</div>
<div class="contarner">
<div class="item"><img src="https://picsum.photos/400?31"></div>
<div class="item"><img src="https://picsum.photos/400?32"></div>
<div class="item"><img src="https://picsum.photos/400?33"></div>
<div class="item"><img src="https://picsum.photos/400?34"></div>
<div class="item"><img src="https://picsum.photos/400?35"></div>
<div class="item"><img src="https://picsum.photos/400?310"></div>
<div class="item"><img src="https://picsum.photos/400?36"></div>
<div class="item"><img src="https://picsum.photos/400?37"></div>
<div class="item"><img src="https://picsum.photos/400?38"></div>
<div class="item"><img src="https://picsum.photos/400?39"></div>
</div>
<div class="contarner">
<div class="item"><img src="https://picsum.photos/400?41"></div>
<div class="item"><img src="https://picsum.photos/400?42"></div>
<div class="item"><img src="https://picsum.photos/400?43"></div>
<div class="item"><img src="https://picsum.photos/400?44"></div>
<div class="item"><img src="https://picsum.photos/400?45"></div>
<div class="item"><img src="https://picsum.photos/400?410"></div>
<div class="item"><img src="https://picsum.photos/400?46"></div>
<div class="item"><img src="https://picsum.photos/400?47"></div>
<div class="item"><img src="https://picsum.photos/400?48"></div>
<div class="item"><img src="https://picsum.photos/400?49"></div>
</div>
</div>
<script src="./index.js"></script>
</body>
</html>
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
::-webkit-scrollbar{
height: 0;
}
$n : 9;
$size : 100vw / $n;
.contarner{
display: flex;
// 奇数行向左偏移
&:nth-child(even){
margin-left: -$size / 2;
}
// 第一排不需要margin-top
&:nth-child(n+2){
margin-top: -$size / 6;
}
.item{
width: $size;
height: $size;
background: #000;
clip-path: polygon(50% 0%, 92% 25%, 92% 74%, 50% 100%, 6% 77%, 6% 26%);
flex-shrink: 0;
transition: all 0.3s ease;
img{
width: 100%;
height: 100%;
object-fit: cover;
}
}
.amplify{
transform: scale(1.3);
}
.reduce{
transform: scale(0.8);
}
}
const items = document.querySelectorAll('.item');
// 鼠标移入移出事件
for (const v of items) {
// 鼠标移入
v.addEventListener('mouseenter', function(e) {
let it = e.target;
it.classList.add('amplify');
// 当前元素索引
let index = [...it.parentNode.children].indexOf(it);
// 当前元素父级的索引
let parentIndex = [...it.parentNode.parentNode.children].indexOf(it.parentNode);
if(parentIndex%2 == 1){
index = index-1;
}
// 左右元素添加类名
if(it.previousElementSibling){
it.previousElementSibling.classList.add('reduce');
}
if(it.nextElementSibling){
it.nextElementSibling.classList.add('reduce');
}
// 上一排元素添加类名
if(it.parentNode.previousElementSibling){
if(it.parentNode.previousElementSibling.children[index]){
it.parentNode.previousElementSibling.children[index].classList.add('reduce');
}
if(it.parentNode.previousElementSibling.children[index+1]){
it.parentNode.previousElementSibling.children[index+1].classList.add('reduce');
}
}
// 下一排元素添加类名
if(it.parentNode.nextElementSibling){
if(it.parentNode.nextElementSibling.children[index]){
it.parentNode.nextElementSibling.children[index].classList.add('reduce');
}
if(it.parentNode.nextElementSibling.children[index+1]){
it.parentNode.nextElementSibling.children[index+1].classList.add('reduce');
}
}
});
// 鼠标移出
v.addEventListener('mouseleave', function(e) {
let it = e.target;
e.target.classList.remove('amplify');
// 当前元素索引
let index = [...it.parentNode.children].indexOf(it);
// 当前元素父级的索引
let parentIndex = [...it.parentNode.parentNode.children].indexOf(it.parentNode);
if(parentIndex%2 == 1){
index = index-1;
}
// 左右元素添加类名
if(it.previousElementSibling){
it.previousElementSibling.classList.remove('reduce');
}
if(it.nextElementSibling){
it.nextElementSibling.classList.remove('reduce');
}
// 上一排元素添加类名
if(it.parentNode.previousElementSibling){
if(it.parentNode.previousElementSibling.children[index]){
it.parentNode.previousElementSibling.children[index].classList.remove('reduce');
}
if(it.parentNode.previousElementSibling.children[index+1]){
it.parentNode.previousElementSibling.children[index+1].classList.remove('reduce');
}
}
//下一排元素添加类名
if(it.parentNode.nextElementSibling){
if(it.parentNode.nextElementSibling.children[index]){
it.parentNode.nextElementSibling.children[index].classList.remove('reduce');
}
if(it.parentNode.nextElementSibling.children[index+1]){
it.parentNode.nextElementSibling.children[index+1].classList.remove('reduce');
}
}
});
}
鼠标移入当前元素放大,周围元素缩小