Adi*_*oui 5 javascript css ajax jquery adaptive-design
很抱歉很久,非常感谢你平常的时间和指导.
我有一个未知的维度; 实际上,它的宽度和高度是使用百分比设置的,因此最终的像素值取决于窗口innerWidth的innerHeight属性.
我需要在div中创建一个ajax分页.换句话说,我有两个孩子div(如下图所示).第二个是分页链接.第一个负责保持物品(水平和垂直对齐).它将(自动)宽度未知.因此,内部物品的数量取决于其最终宽度和高度,因为所有物品都具有固定的已知宽度和高度(假设宽度为80像素,高度为50像素).
目标是找到一种很好的方法来找到X和Y的值.
这两个值将有助于查找每页的项目数(用于服务器端的分页).将通过将总页数除以该值来创建分页链接.注意:一切都是用ajax完成的.
我打算做什么:
calculate_viewport()在解析/执行任何其他事物之前,创建一个javascript函数作为第一个执行的函数.calculate_viewport().使用X和Y进行请求某个页面的ajax调用.
Run Code Online (Sandbox Code Playgroud)<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.我已准备好根据要求提供此部分的任何代码.谢谢
你永远无法靠自己获得正确的布局数学。我的建议是预先布置所有项目(弹性框在这里是理想的选择!),获取计数,然后使用 ajax 填充它们。
这是我制作的一个快速演示。实际的 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!");
Run Code Online (Sandbox Code Playgroud)
重要的一行是包含.position(). 这将获取每个项目顶部边缘的位置,添加高度以找到其底部边缘,并检查它是否超出项目容器的边界。
之后,您可以使用计数从服务器查询必要的项目。我还建议visbility: hidden;在所有项目上使用,这样用户在准备好之前就不会看到它们。