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;.........完整代码请登录后点击上方下载按钮下载查看

网友评论0