sda-utilities的trackProgress实现滚动网页首屏粘性置顶效果代码
代码语言:html
所属分类:加载滚动
代码描述:sda-utilities的trackProgress实现滚动网页首屏粘性置顶效果代码。
代码标签: sda-utilities trackProgress 滚动 网页 首屏 粘性 置顶
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <style> @layer scrollsnapping { html { scroll-snap-type: y mandatory; --card-large: 0; /* Value gets set via JS */ --card-small: 0; /* Value gets set via JS */ } .card::before, .tracks::before { content: ""; pointer-events: none; z-index: -1; position: absolute; width: 100%; top: 0; left: 0; scroll-snap-align: start; z-index: 10; } .card::before { height: var(--card-large); } .tracks { position: relative; } .tracks::before { scroll-margin-top: var(--card-small); top: var(--card-large); height: calc(100% - var(--card-large)); } } @layer viewtransitions { /* Configure the durations. The idea here is that the card itself runs for a certain duration, but elements in that card only for a certain part of that entire duration. To achieve this, the durations and delays are expressed as fractions, which are then used in a calcuation to get the actual duration in seconds. */ ::view-transition { --vt-base-duration: 1s; --vt-description-duration: 0.5; --vt-description-delay: 0; --vt-moremeta-duration: 0.65; --vt-moremeta-delay: 0.2; --vt-title-duration: 0.6; --vt-title-delay: 0.2; --vt-meta-duration: 0.5; --vt-meta-delay: 0.3; } /* Apply base duration to all + make sure they are linear */ ::view-transition-group(*) { animation-duration: var(--vt-base-duration); animation-timing-function: linear; } /* Also inherit the delay and easing from the group onto the child pseudos */ ::view-transition-image-pair(*), ::view-transition-new(*), ::view-transition-old(*) { animation-delay: inherit; animation-timing-function: inherit; } /* Allow cursor to send events to underlying page while a VT is running */ ::view-transition { pointer-events: none; } /* Some keyframes to use */ @keyframes slide-up { to { translate: 0 -100%; }} @keyframes slide-down { from { translate: 0 -100%; }} @keyframes fade-out { to { opacity: 0; }} @keyframes fade-in { from { opacity: 0; }} /* Capture all these individual elements instead. Also, don’t capture the root. */ /* Note: we don’t capture the tracklist in this version! */ :root { view-transition-name: none; } .card { view-transition-name: card; } .meta { view-transition-name: meta; } .title { view-transition-name: title; } .moremeta { view-transition-name: moremeta; } .description { view-transition-name: description; } .cover { view-transition-name: cover; } /* The card itself should just shrink, not fade */ ::view-transition-group(card) { overflow: clip; } ::view-transition-new(card), ::view-transition-old(card) { animation-name: none; } /* The title and moremeta remain the same. Therefore, don’t fade but immediately use the new snapshot */ ::view-transition-new(title), ::view-transition-new(moremeta) { animation-name: none; } ::view-transition-old(title), ::view-transition-old(moremeta) { display: none; } /* Slide and fade description. */ ::view-transition-old(description):only-child { animation-duration: calc(var(--vt-base-duration) * var(--vt-description-duration)); animation-delay: calc(var(--vt-base-duration) * var(--vt-description-delay)); animation-name: slide-up, fade-out; } ::view-transition-new(description):only-child { animation-duration: calc(var(--vt-base-duration) * var(--vt-description-duration)); animation-delay: calc(var(--vt-base-duration) * (1 - (var(--vt-description-delay) + var(--vt-description-duration)))); animation-name: slide-down, fade-in; } /* Set timing for various components */ ::view-transition-group(moremeta) { animation-duration: calc(var(--vt-base-duration) * var(--vt-moremeta-duration)); animation-delay: calc(var(--vt-base-duration) * var(--vt-moremeta-delay)); } :root:not(:has(div.small))::view-transition-group(moremeta) { animation-delay: calc(var(--vt-base-duration) * (1 - (var(--vt-moremeta-delay) + var(--vt-moremeta-duration)))); } ::view-transition-group(title) { animation-duration: calc(var(--vt-base-duration) * var(--vt-title-duration)); animation-delay: calc(var(--vt-base-durat.........完整代码请登录后点击上方下载按钮下载查看
网友评论0