js+css实现图片相册滚动式展示放大效果代码

代码语言:html

所属分类:画廊相册

代码描述:js+css实现图片相册滚动式展示放大效果代码

代码标签: js css 图片 相册 滚动式 展示 放大

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en" >

<head>
  <meta charset="UTF-8">
  

<link type="text/css" rel="stylesheet" href="//repo.bfw.wiki/bfwrepo/css/normalize.5.0.css">
  
  
<style>
@import "normalize.css";

*,
*:after,
*:before {
	box-sizing: border-box;
}

body {
	display: flex;
	justify-content: flex-end;
	min-height: 100vh;
	font-family:  "SF Pro Text", "SF Pro Icons", "AOS Icons", "Helvetica Neue", Helvetica, Arial, sans-serif, system-ui;
}

body::after {
	content: "";
	position: fixed;
	right: 0;
	width: calc(var(--snap-size) + 2rem);
	background: canvas;
	-webkit-mask: linear-gradient(white, transparent calc(var(--snap-size) * 1.5) calc(100% - (var(--snap-size) * 1.5)), white);
	        mask: linear-gradient(white, transparent calc(var(--snap-size) * 1.5) calc(100% - (var(--snap-size) * 1.5)), white);
	top: 0;
	height: 100vh;
	pointer-events: none;
	z-index: 10;
}

body::before {
	--size: 40px;
	--line: color-mix(in lch, canvasText 15%, hsl(0 0% 100% / 0.25));
	content: '';
	height: 100vh;
	width: 100vw;
	position: fixed;
	background: linear-gradient(
				90deg,
				var(--line) 1px,
				transparent 1px var(--size)
			)
			50% 50% / var(--size) var(--size),
		linear-gradient(var(--line) 1px, transparent 1px var(--size)) 50% 50% /
			var(--size) var(--size);
	-webkit-mask: linear-gradient(-25deg, transparent 65%, white);
	        mask: linear-gradient(-25deg, transparent 65%, white);
	top: 0;
	transform-style: flat;
	pointer-events: none;
	z-index: -1;
}

html {
	color-scheme: dark only;
	scroll-behavior: smooth;
	-ms-scroll-snap-type: y mandatory;
	    scroll-snap-type: y mandatory;
}

:root {
  --count: 50;
	--snap-size: 48px;
	--offset: 1;
}

@media(min-width: 768px) {
	:root {
		--offset: 2;
	}
}

main {
	padding-left: 1rem;
	padding-right: calc(var(--snap-size) * 5);
	position: fixed;
	top: 0;
	left: 0;
	right: 0;
	display: grid;
	height: calc(100vh * var(--count));
	grid-template-rows: repeat(var(--count), 1fr);
	place-items: center;
	-webkit-animation: img-reel both steps(calc(var(--count) - 1));
	        animation: img-reel both steps(calc(var(--count) - 1));
	animation-timeline: scroll(root);
	pointer-events: none;
}

@media(max-width: 768px) {
	main {
		display: none;
	}
}

@-webkit-keyframes img-reel {
	to {
		translate: 0 calc(-100% + 100vh);
	}
}

@keyframes img-reel {
	to {
		translate: 0 calc(-100% + 100vh);
	}
}

aside {
	width: var(--snap-size);
	margin-top: calc(50vh - (var(--snap-size) * 0.25));
	margin-bottom: calc(50vh - (var(--snap-size) * 0.5));
	z-index: 2;
}

aside ul {
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	list-style-type: none;
	position: relative;
	right: 1rem;
	align-items: flex-end;
	transform-style: preserve-3d;
}

@property --active {
	initial-value: 0;
	inherits: true;
	syntax: '<number>';
}

li {
	scroll-snap-align: center;
	scroll-margin-block: calc(50vh - var(--snap-size));
	container-type: size;
	flex: 1 1 var(--snap-size);
	aspect-ratio: 1;
	-webkit-animation: scale both linear;
	        animation: scale both linear;
	animation-timeline: view();
	animation-range: cover calc(50% - (var(--snap-size) * var(--offset))) cover calc(50% + (var(--snap-size) * var(--offset)));
	transform-origin: 100% 50%;
}

@media(min-width: 768px) {
	li {
		filter: saturate(0.2);
		-webkit-animation: scale-l both linear;
		        animation: scale-l both linear;
		animation-timeline: view();
		animation-range: cover calc(50% - (var(--snap-size) * var(--offset))) cover calc(50% + (var(--snap-size) * var(--offset)));
	}
}

@-webkit-keyframes scale {
	50% {
		--active: 1;
		z-index: 1000;
	}
}

@keyframes scale {
	50% {
		--active: 1;
		z-index: 1000;
	}
}

@-webkit-keyframes scale-l {
	50% {
		translate: -120% 0;
		scale: 2;
		transform: translate3d(0, 0, 1000px);
		filter: saturate(1);
		z-index: 1000;
	}
}

@keyframes scale-l {
	50% {
		translate: -120% 0;
		scale: 2;
		transform: translate3d(0, 0, 1000px);
		filter: saturate(1);
		z-index: 1000;
	}
}

li img {
	height: 100%;
	width: 100%;
	border-radius: 6px;
}



li a {
	min-width: 100cqw;
	min-height: 100cqh;
	max-width: 600px;
	max-height: 600px;
	width: 100%;
	height: 100%;
	display: block;
	border: 4px solid transparent;
	border-radius: 12px;
	position: relative;
	position: absolute;
	right: 0;
	top: 50%;
	transform-origin: 100% 50%;
	translate: calc((var(--active) * (var(--snap-size) + 1rem)) * -1) -50%;
	width: calc((var(--active) * (100vw - (var(--snap-size) + 3rem))));
	height: calc((var(--active) * (100vw - (var(--snap-size) + 3rem))));
	aspect-ratio: 1;
	z-index: calc(1 + (var(--active) * 999));
}

aside span {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
	border-width: 0;
}

main img {
	width: 100%;
	max-width: 600px;
	max-height: 90vh;
	-o-object-fit: cover;
	   object-fit: cover;
}

.bear-link {
	color: canvasText;
	position: fixed;
	top: 1rem;
	left: 1rem;
	width: 48px;
	aspect-ratio: 1;
	display: grid;
	place-items: center;
	opacity: 0.8;
}

:where(.x-link, .bear-link):is(:hover, :focus-visible) {
	opacity: 1;
}
.bear-link svg {
	width: 75%;
}
</style>


  
  
</head>

<body translate="no">
  <aside>
      <nav>
        <ul>
          <li id="img-1">
            <a href="#img-1"
              ><img src="https://picsum.photos/600/600?random=1" alt="" /><span
                >See image 1</span
              ></a
            >
          </li>
          <li id="img-2">
            <a href="#img-2"
              ><img src="https://picsum.photos/600/600?random=2" alt="" /><span
                >See image 2</span
              ></a
            >
          </li>
          <li id="img-3">
            <a href="#img-3"
              ><img src="https://picsum.photos/600/600?random=3" alt="" /><span
                >See image 3</span
              ></a
            >
          </li>
          <li id="img-4">
            <a href="#img-4"
              ><img src="https://picsum.photos/600/600?random=4" alt="" /><span
                >See image 4</span
              ></a
            >
          </li>
          <li id="img-5">
            <a href="#img-5"
              ><img src="https://picsum.photos/600/600?random=5" alt="" /><span
                >See image 5</span
              ></a
            >
          </li>
          <li id="img-6">
            <a href="#img-6"
              ><img src="https://picsum.photos/600/600?random=6" alt="" /><span
                >See image 6</span
              ></a
            >
          </li>
          <li id="img-7">
            <a href="#img-7"
              ><img src="https://picsum.photos/600/600?random=7" alt="" /><span
                >See image 7</span
              ></a
            >
          </li>
          <li id="img-8">
            <a href="#img-8"
              ><img src="https://picsum.photos/600/600?random=8" alt="" /><span
                >See image 8</span
              ></a
            >
          </li>
          <li id="img-9">
            <a href="#img-9"
              ><img src="https://picsum.photos/600/600?random=9" alt="" /><span
                >See image 9</span
              ></a
            >
          </li>
          <li id="img-10">
            <a href="#img-10"
              ><img src="https://picsum.photos/600/600?random=10" alt="" /><span
                >See image 10</span
              ></a
            >
          </li>
          <li id="img-11">
            <a href="#img-11"
              ><img src="https://picsum.photos/600/600?random=11" alt="" /><span
                >See image 11</span
              ></a
            >
          </li>
          <li id="img-12">
            <a href="#img-12"
              ><img src="https://picsum.photos/600/600?random=12" alt="" /><span
                >See image 12</span
              ></a
            >
          </li>
          <li id="img-13">
            <a href="#img-13"
              ><img src="https://picsum.photos/600/600?random=13" alt="" /><span
                >See image 13</span
              ></a
            >
          </li>
          <li id="img-14">
            <a href="#img-14"
              ><img src="https://picsum.photos/600/600?random=14" alt="" /><span
                >See image 14</span
              ></a
            >
          </li>
          <li id="img-15">
            <a href="#img-15"
              ><img src="https://picsum.photos/600/600?random=15" alt="" /><span
                >See image 15</span
              ></a
            >
          </li>
          <li id="img-16">
            <a href="#img-16"
              ><img src="https://picsum.photos/600/600?random=16" alt="" /><span
                >See image 16</span
              ></a
            >
          </li>
          <li id="img-17">
            <a href="#img-17"
              ><img src="https://picsum.photos/600/600?random=17" alt="" /><span
                >See image 17</span
              ></a
            >
          </li>
          <li id="img-18">
            <a href="#img-18"
              ><img src="https://picsum.photos/600/600?random=18" alt="" /><span
                >See image 18</span
              ></a
            >
          </li>
          <li id="img-19">
            <a href="#img-19"
              ><img src="https://picsum.photos/600/600?random=19" alt="" /><span
                >See image 19</span
              ></a
            >
          </li>
          <li id="img-20">
            <a href="#img-20"
              ><img src="https://picsum.photos/600/600?random=20" alt="" /><span
                >See image 20</span
              ></a
            >
          </li>
          <li id="img-21">
            <a href="#img-21"
              ><img src="https://picsum.photos/600/600?random=21" alt="" /><span
                >See image 21</span
              ></a
            >
          </li>
          <li id="img-22">
            <a href="#img-22"
              ><img src="https://picsum.photos/600/600?random=22" alt="" /><span
                >See image 22</span
              ></a
            >
          </li>
          <li id="img-23">
            <a href="#img-23"
              ><img src="https://picsum.photos/600/600?random=23" alt="" /><span
                >See image 23</span
              ></a
            >
          </li>
          <li id="img-24">
            <a href="#img-24"
              ><img src="https://picsum.photos/600/600?random=24" alt="" /><span
                >See image 24</span
              ></a
            >
          </li>
          <li id="img-25">
            <a href="#img-25"
              ><img src="https://picsum.photos/.........完整代码请登录后点击上方下载按钮下载查看

网友评论0