gpt4 book ai didi

javascript - 取决于窗口大小的分页 - 查找每页元素数的方法

转载 作者:技术小花猫 更新时间:2023-10-29 11:40:09 28 4
gpt4 key购买 nike

抱歉拖了这么久,非常感谢您平时的时间和指导。

我有一个未知尺寸的 div;事实上,它的宽度和高度是使用百分比设置的,因此以像素为单位的最终值取决于窗口 innerWidth一个innerHeight特性。

我需要在该 div 中创建一个 ajax 分页。换句话说,我有两个 child div s(下图)。第二个用于分页链接。第一个负责保存元素(水平和垂直对齐)。它将(自动)为 unknown width 。因此,内部元素的数量取决于其最终宽度和高度,因为所有元素都有固定的已知宽度和高度(假设 80 像素宽度和 50 像素高度)。

我希望下图能以最好的方式说明我的问题: enter image description here

目标是找到一个好的方法来找到 X 和 Y 的值。

  • X= 每行的元素数
  • Y=每列的元素数

这两个值将有助于找到每页的元素数(用于服务器端的分页)。分页链接将通过将总页数除以该值来创建。注意:一切都通过 ajax 完成。

我打算做什么:

  • 创建一个javascript函数calculate_viewport()在解析/执行任何其他事情之前首先执行。
  • 创建一个 javascript 函数,根据 calculate_viewport() 返回的值计算 X 和 Y 值.
  • 将 X 和 Y 用于请求特定页面的 ajax 调用。

    <script type="text/javascript">

    function calculate_viewport() {
    var width_and_height_object;
    // calcluate width and height using of current window.innerWidth and window.innerHeight
    // put values in an object width_and_height_object
    return width_and_height_object; }

    function calculate_XandY(width_and_height_object) {
    var XandY_object;
    // calcluate X and Y values by perfoming necessary division operations
    return XandY_object; }

    var XandY = calculate_XandY(viewport()); </script>

    <!DOCTYPE html> <html>
    <head>
    </head>
    <body>
    <div id="parent" style="height: 70%; width: 50%">
    <div id="items_container" style="height: calc(100% - 30px); width: 100%"></div>
    <div id="pagination" style="height: 30px; width: 100%">></div>
    </div>
    </body>
    <script src="jquery.js"></script>
    <script type="text/javascript">
    $('a.next a.previous').click(function(e){
    e.preventDefault();
    $.ajax({
    type: "GET",
    url: url_to_page_of_items,
    data: { number_of_items_per_page : X_times_Y },
    cache: false,
    success: callback // append result to items container div
    });
    return false;
    });
    </script> </html>

您如何看待这种方法?有没有其他更好的方法来实现这个目标?创建 <script> 是否可以接受<html> 之前的标签标记只是为了进行早期窗口大小计算?

注意:对于服务器端部分,我设法通过我正在使用的 ORM 库提供的一些函数对结果进行分页。我使用服务器端模板引擎将元素页面呈现为 HTML。我准备根据要求为这部分提供任何代码。谢谢

最佳答案

您永远无法独自获得正确的布局数学。我的建议是事先布置所有元素( flexbox 在这里是理想的!),计算数量,然后使用 ajax 填充它们。

Here's a quick demo我鞭打起来。实际的 JS 非常简单,使用 jQuery。

var MARGIN = 10; //This should match your CSS

var itemContainerHeight = $(".foo").height();
var count = 0;

$(".item").each(function () {
if ($(this).position().top + $(this).height() + MARGIN > itemContainerHeight) {
$(this).hide();
} else {
count++;
}
});

$('.pagination').text("I can display "+count+" items!");

重要的是包含 .position() 的那一行。这将获取每个元素顶部边缘的位置,添加高度以找到它们的底部边缘,并检查它是否超过了元素容器的边界。

在此之后,您可以使用计数从服务器查询必要的元素。我还建议对所有元素使用 visbility: hidden;,这样用户就不会在准备好之前看到它们。

关于javascript - 取决于窗口大小的分页 - 查找每页元素数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35565521/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com