ScrollIntoView() 函数在 Chrome 中不起作用,但在其他浏览器中工作

ScrollIntoView() Function Not Working In Chrome But Working In Other Browsers

提问人:CODE KING 提问时间:9/11/2023 最后编辑:CODE KING 更新时间:9/11/2023 访问量:34

问:

我正在制作一个网站,并制作了 JavaScript 代码来将元素滚动到视图中,我按下按钮的次数越多,滚动到视图中的元素的 ID 应该越高。它在 Edge 和 Firefox 上可以正常工作,但在 Chrome 中,它只在第一次工作,之后它拒绝滚动,即使元素的 ID 正在增加。如果有人能帮助我解决这个问题,我将不胜感激。

这是JS代码:

document.addEventListener("DOMContentLoaded", function () {
    const scroll_button = document.getElementById("scroll_button");
    var scrollnum = 4

    function scrollFunction() {
        console.log(scrollnum)
        const product = document.getElementById(scrollnum);
        // Scroll the element into view, with smooth behavior
        product.scrollIntoView({
            behavior: "smooth",
            block: "start"
        });
        scrollnum += 2
    }
    if (scroll_button) {
        scroll_button.addEventListener("click", scrollFunction);
    }
})

这是 HTML 代码的一部分:

<div class="col product_row">
<!-- <div class="product_row"> -->
<div class="col-md-4 mb-2" id="1">
    <div class="card">
        <img src="./admin_area/product_images/apple.webp" class="card-img-top">
        <div class="card-body">
            <h5 class="card-title">Apple</h5>
            <p class="card-text">tasty</p>
            <a href="index.php?add_to_cart=4" class="btn btn-info">Add to basket</a>
            <a href="product_details.php?product_id=4" class="btn btn-secondary">View more</a>
            // <a href="#4" class="btn btn-secondary">Scroll</a>
        </div>
    </div>
</div>
<div class="col-md-4 mb-2" id="2">
    <div class="card">
        <img src="./admin_area/product_images/AZZAM yacht.jpg" class="card-img-top">
        <div class="card-body">
            <h5 class="card-title">AZZAM</h5>
            <p class="card-text">big yacht</p>
            <a href="index.php?add_to_cart=5" class="btn btn-info">Add to basket</a>
            <a href="product_details.php?product_id=5" class="btn btn-secondary">View more</a>
            // <a href="#5" class="btn btn-secondary">Scroll</a>
        </div>
    </div>
</div>
<div class="col-md-4 mb-2" id="3">
    <div class="card">
        <img src="./admin_area/product_images/Bugatti La Voiture Noire.jpg" class="card-img-top">
        <div class="card-body">
            <h5 class="card-title">Bugatti La Voiture Noire</h5>
            <p class="card-text">nice car</p>
            <a href="index.php?add_to_cart=2" class="btn btn-info">Add to basket</a>
            <a href="product_details.php?product_id=2" class="btn btn-secondary">View more</a>
            // <a href="#6" class="btn btn-secondary">Scroll</a>
        </div>
    </div>
</div>
<button id="scroll_button">Scroll</button>

我把console.log(scrollnum)放在我的代码中,看看scrollnum是否正在更新。它确实在我测试的所有网络浏览器中更新。我尝试放置一个 setTimeout() 函数,以便它在滚动之前等待,但这没有任何效果,实际上甚至不起作用。

JavaScript PHP HTML 谷歌浏览器

评论

0赞 Professor Abronsius 9/11/2023
将整数属性更改为 - 不对 ID 使用数字的限制不适用。然后,而不是使用类似iddata-idgetElementByIdquerySelector[data-id="${scrollnum}"]

答:

0赞 Donny Burnside 9/11/2023 #1

只是为了让您知道,ID 或类都不应以数字开头。

无论如何,请尝试记录 product 而不是 scrollnum,以确保您尝试滚动到的元素实际上正在更新。

评论

0赞 Community 9/11/2023
正如目前所写的那样,你的答案尚不清楚。请编辑以添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。您可以在帮助中心找到有关如何写出好答案的更多信息。