图像动画重置移动设备上的页面滚动



我刚刚明白了。应用于body的overflow css属性不会被slideshowdiv继承。添加"overflow: hidden">

原始文章

我有一个带有图像幻灯片的网页。使用setInterval并调用以下函数将幻灯片设置为每5秒运行一次:

function startSlideShow() {
console.log('starting slideshow');
const img = slideImages.shift();
img.style.zIndex = 0
slideImages.push(img);
slideImages[0].style.zIndex = 10;
slideImages[0].style.display = "block";
removePreviousImage(img);
}

动画关键帧:

@keyframes slide {
from {
transform: translateX(100%);
}
to {
transform: translateX(0);
}
}

页面结构为:

  • ><<li>幻灯片/gh>
  • 其他内容
  • 标题"position: sticky",所以它应该总是可见的。

    问题:在浏览器开发工具的移动或响应模式下,当我向下滚动动画时,标题是不可见的,即它忽略了"位置:sticky"css规则。动画完成后,页面会将滚动位置重置回顶部。

    它在桌面上工作,即标题总是在屏幕顶部可见,滚动位置不会重置。

    我还在学习,我不明白是什么导致了这个问题,为什么只在手机上?我试过谷歌,但没有运气,主要是因为我不知道该搜索什么。

    编辑:按照下面的代码重新创建了这个问题:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>Slideshow</title>
    <style>
    body {
    min-height: 100%;
    font-family: Helvetica,
    Arial,
    sans-serif;
    overflow-x: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-direction: column;
    }
    .preload * {
    animation: none !important;
    }
    img {
    max-width: 100%;
    height: auto;
    }
    .main__overlay {
    z-index: 200;
    }
    .image-slider__overlay {
    z-index: 1000;
    }
    .header {
    z-index: 2000;
    }
    .header {
    text-transform: uppercase;
    padding: var(--size1) var(--size0);
    opacity: 0.9;
    position: sticky;
    top: 0;
    left: 0;
    width: 100%;
    background-color: #fff;
    }
    .image-slider {
    position: relative;
    }
    .image-slider__img {
    position: absolute;
    top: 0;
    left: 0;
    animation-name: slide;
    animation-duration: 3s;
    }
    .no-slide {
    aspect-ratio: attr(width) / attr(height);
    }
    @keyframes slide {
    from {
    transform: translateX(100%);
    }
    to {
    transform: translateX(0);
    }
    }
    </style>
    </head>
    <body>
    <body class="preload">
    <header class="header">
    <h1 class="header__logo">Earthen Karkhana</h1>
    </header>
    <div class="image-slider">
    <div class="no-slide">
    This div will be an image is the actual code. Image 1
    <p>
    Lorem ipsum dolor sit amet consectetur adipisicing elit. Sequi odit, dolore omnis voluptates, accusantium
    architecto eos nulla totam facere eum numquam temporibus error. Saepe aliquid asperiores veritatis sit
    inventore repudiandae.
    Quam ut praesentium reprehenderit necessitatibus ab voluptatibus esse laborum enim, veniam exercitationem quia
    autem cum nihil et officiis itaque vero quasi distinctio. Quidem, ad a ipsum nihil incidunt ipsa libero!
    </p>
    </div>
    <div class="image-slider__img">
    This div will be an image is the actual code. Image 2
    <p>
    Lorem ipsum dolor sit amet consectetur adipisicing elit. Sequi odit, dolore omnis voluptates, accusantium
    architecto eos nulla totam facere eum numquam temporibus error. Saepe aliquid asperiores veritatis sit
    inventore repudiandae.
    Quam ut praesentium reprehenderit necessitatibus ab voluptatibus esse laborum enim, veniam exercitationem quia
    autem cum nihil et officiis itaque vero quasi distinctio. Quidem, ad a ipsum nihil incidunt ipsa libero!
    </p>
    </div>
    <div class="image-slider__img">
    This div will be an image is the actual code. Image 3
    <p>
    Lorem ipsum dolor sit amet consectetur adipisicing elit. Sequi odit, dolore omnis voluptates, accusantium
    architecto eos nulla totam facere eum numquam temporibus error. Saepe aliquid asperiores veritatis sit
    inventore repudiandae.
    Quam ut praesentium reprehenderit necessitatibus ab voluptatibus esse laborum enim, veniam exercitationem quia
    autem cum nihil et officiis itaque vero quasi distinctio. Quidem, ad a ipsum nihil incidunt ipsa libero!
    </p>
    </div>
    <div class="image-slider__img">
    This div will be an image is the actual code. Image 4
    <p>
    Lorem ipsum dolor sit amet consectetur adipisicing elit. Sequi odit, dolore omnis voluptates, accusantium
    architecto eos nulla totam facere eum numquam temporibus error. Saepe aliquid asperiores veritatis sit
    inventore repudiandae.
    Quam ut praesentium reprehenderit necessitatibus ab voluptatibus esse laborum enim, veniam exercitationem quia
    autem cum nihil et officiis itaque vero quasi distinctio. Quidem, ad a ipsum nihil incidunt ipsa libero!
    </p>
    </div>
    </div>
    <section class="projects__main">
    <h2 class="projects-link--heading body_text">
    Projects
    </h2>
    <p>
    Lorem ipsum dolor sit amet consectetur adipisicing elit. Sequi odit, dolore omnis voluptates, accusantium
    architecto eos nulla totam facere eum numquam temporibus error. Saepe aliquid asperiores veritatis sit inventore
    repudiandae.
    Quam ut praesentium reprehenderit necessitatibus ab voluptatibus esse laborum enim, veniam exercitationem quia
    autem cum nihil et officiis itaque vero quasi distinctio. Quidem, ad a ipsum nihil incidunt ipsa libero!
    Autem reiciendis fugit quis, perspiciatis nihil sit aliquam impedit dicta placeat veritatis culpa voluptate nisi
    aut consectetur unde, alias et fugiat quisquam dolor distinctio eos dolore non error! Id, optio.
    Omnis excepturi delectus inventore ullam harum accusamus sed consequatur autem quo obcaecati mollitia corrupti
    amet, eaque veritatis, sit dolorum voluptates id atque rem, ipsam officia? Architecto magni dignissimos sint
    dolorem!
    Doloremque enim nobis eum esse nihil. Fugiat nesciunt obcaecati omnis. Doloribus harum deserunt sapiente omnis
    quasi aut voluptatum consequatur perferendis, tempora nulla blanditiis labore vitae provident repellendus,
    eveniet sit quas.
    Nemo, quos perspiciatis modi repudiandae delectus doloremque. Vero dolores blanditiis itaque consequatur minus
    distinctio, sapiente corporis, suscipit ratione tenetur animi sit eius quod dolorem nobis sed pariatur tempora
    natus ea.
    Quam sequi distinctio adipisci dolor? Asperiores exercitationem eveniet eum architecto voluptates, tempore saepe
    sint eius quisquam odit veritatis debitis eligendi ab impedit, officia nam! Libero tenetur ad consequuntur eos
    natus.
    Corporis pariatur eius velit ad sequi facere impedit quia laboriosam quos? Eum, labore minima temporibus placeat
    sunt totam neque, quod harum facilis reiciendis doloribus aliquid dolor saepe distinctio expedita sint.
    Repellat, ipsam! Omnis nihil maiores amet excepturi velit, deleniti minus voluptatibus quasi vel, magni aperiam
    veritatis non asperiores, nisi dolorum hic eligendi ipsa? Omnis id esse hic non sed est!
    Qui accusantium dignissimos natus corporis asperiores, perferendis eveniet ab et, consequuntur vitae officiis
    nulla consequatur obcaecati magni corrupti nihil neque nam iste quidem! Libero eos est, beatae error praesentium
    eligendi!
    </p>
    </section>
    <script>
    "use strict";
    const slideImages = Array.from(document.querySelectorAll(".image-slider__img"));
    // Wait for page to load before starting slideshow
    window.addEventListener('load', (e) => {
    document.querySelector("body").classList.remove("preload");
    // slideshow should only run on index page 
    if (document.querySelectorAll(".image-slider__img").length == 0) return;
    // Static image not required to be visible once slide images are loaded in
    setTimeout(() => document.querySelector(".no-slide").style.opacity = 0, 8000);
    slideShow();
    });
    
    function slideShow() {
    slideImages.forEach((img, index) => {
    img.style.display = "none";
    });
    console.log(slideImages);
    let animationInterval = setInterval(startSlideShow, 5000);
    }
    function startSlideShow() {
    console.log('starting slideshow');
    const img = slideImages.shift();
    img.style.zIndex = 0
    slideImages.push(img);
    slideImages[0].style.zIndex = 10;
    slideImages[0].style.display = "block";
    removePreviousImage(img);
    }
    function removePreviousImage(img) {
    setTimeout(function () { img.style.display = "none" }, 3000);
    }
    </script>
    </body>
    </html>
    

    如果在开发工具的响应模式下查看,当动画运行时,页面布局会发生变化,但在桌面模式下不会发生这种情况。

    在桌面模式下,调整浏览器大小以匹配移动设备的宽度不会触发此问题。

    我猜你的浏览器不支持position : sticky;尝试使用其他浏览器如chrome。‌‌‌‌‌,‌我强烈建议你最好使用"浏览器前缀"。.

    你可以阅读"browser-prefix ":https://www.thoughtco.com/css -供应商-前缀- 3466867

    最新更新