刷新主页内的页面时防止div在顶部滚动

Posted

技术标签:

【中文标题】刷新主页内的页面时防止div在顶部滚动【英文标题】:Prevent div from scrolling on top when page inside home page is refreshed 【发布时间】:2021-09-07 04:53:37 【问题描述】:

我是 javascript 新手,我正在做我的项目。我这里有两个页面,第一个是 home.php,这里是调用 data.php 并每 3 秒刷新一次的代码:

<div id="show"></div>
<script type="text/javascript">
                    function reload()
                    
                        $("#show").load("data.php");
                    
                    $(function() 
                        setInterval(reload, 3000);
                    );</script>

在data.php中,这是我的代码:

<div class = "table-container" id = "table-container">
echo '<table class = "track" name = "allData" id = "allData">           
                                <tr style">
                                    <th> Device ID </th>
                                    <th> Name </th>
                                    <th> Date and Time </th>
                                    <th> latitude </th>
                                    <th> longitude </th>
                                    <th> Contact Number </th>
                                    <th> Age </th>
                                    <th> Track </th>
                                    <th> Status </th>
                                </tr>';

                                $sql = "SELECT d.deviceID, CONCAT(u.lastName, ', ', u.firstName) AS Name, t.dateTime, t.latitude, t.longitude, u.contactNumber, u.age, t.status
                                    FROM tbltracking as t 
                                    LEFT OUTER JOIN tbldevicemaster as d 
                                    ON t.deviceID = d.deviceID
                                    LEFT OUTER JOIN tblusers as u 
                                    ON d.userID = u.userID
                                    ORDER BY dateTime;";
                                $result = $conn-> query($sql);
                                $number = $result -> num_rows;
                                if ($result-> num_rows > 0) 
                                
                                    while ($row = $result-> fetch_assoc()) 
                                    
                                        echo 
                                        "<tr><td>"
                                            . $row ["deviceID"] 
                                            ."</td><td class = 'name'>"
                                            . $row ["Name"] 
                                            ."</td><td>"
                                            . $row ["dateTime"] 
                                            ."</td><td class = 'latitude'>"
                                            . $row ["latitude"] 
                                            ."</td><td class = 'longitude'>"
                                            . $row ["longitude"]
                                            ."</td><td>"
                                            . $row ["contactNumber"] 
                                            ."</td><td>"
                                            . $row ["age"]
                                            ."</td><td>"
                                            .'<button type = "button" class = "a"> Select</button>'
                                            ."</td><td>" .$row["status"]
                                            ."</td></tr>";

                                    
                                    echo "</table>";
                                    echo "</div>";

这是表格容器的 CSS:

.table-container
    
        overflow-y: scroll;
        height: 170px;
        display: block;
        width: 100%;
    

所以是的,在 home.php 中,data.php 窗口可以显示在 div id "show" 内,并且每 3 秒刷新一次,以便页面再次运行查询。问题是,当我在 home.php 时,每当我尝试滚动表格并刷新时,滚动条都会在顶部。

就像我说的,我对编程比较陌生,所以有人可以帮助我吗?

我还尝试了另一个代码,该代码仅在我在 data.php 页面并手动刷新页面时有效。该方法将其存储到本地存储。这是data.php的部分代码:

<script>
window.addEventListener("beforeunload", () => 
localStorage.setItem("scrollPositon", document.querySelector(".table-container").scrollTop);
);


window.addEventListener("load", () => 
document.querySelector(".table-container").scrollTop = localStorage.getItem("scrollPositon") || 0;
);

</script>

【问题讨论】:

为什么不使用 ajax 从 data.php 动态加载数据?设置的间隔刷新基本上刷新页面,因此滚动回到顶部。 【参考方案1】:

有一种方法可以重新加载 data.php 内容并保持滚动位置,问题在于您的表格高度,每 3 秒刷新一次,所以您需要做的是获取表格容器和表格标签像这样远离data.php:

(在 home.php 内)


<div class="table-container">
  <table class="track" name="allData" id="show"> <!-- ID: show -->
  </table>
</div>

<script>
var auto_refresh = setInterval(
(function () 
    $("#show").load("data.php"); //Load the content into the div
), 3000);

</script>


在你的 data.php 中:

echo '<tr style">
  <th> Device ID </th>
   ...
   ...
   etc..
     ...
     ...
     ."</td><td>" .$row["status"]
     ."</td></tr>";
    


这将在每次重新加载时保持滚动位置,如果你想在其他地方显示 data.php 内容,你必须添加 table-container 和 table 标签,就像我在 home.php 中展示的那样。

【讨论】:

以上是关于刷新主页内的页面时防止div在顶部滚动的主要内容,如果未能解决你的问题,请参考以下文章

有啥办法可以防止 FormBuilder 元素滚动到页面顶部?

如何让DIV模块随着页面固定和不固定随意切换

滚动到AngularJS中的div顶部?

在具有动画滚动功能的threeJS画布中,如何防止向上滚动超出页面顶部?

刷新页面使页面保持在当前位置显示而不跳回顶部

使用js或jq控制一个div,当滚动到页面顶部的时候固定在顶部,离开可继续滚动吗?