我有一个创建栅格的脚本,每次视口宽度改变时,栅格元素都会“重新定位”。我没有权限访问这个脚本,也不是我写的。我想这是一个砖石网格。
我正在动态地改变网格的内容,所以我需要以某种方式“刷新”(重新计算)网格而不刷新页面。在移动端,我通过更改“初始比例”元标签(然后重置它)来强制网格更新。然而,桌面上的viewport标签被忽略了,所以我不知道如何让浏览器认为页面尺寸发生了变化,并强制刷新网格。
任何想法都很感谢,谢谢。
发布于 2019-03-29 04:06:35
如果砖石脚本很好,它可能会有一个API特性来做你需要的事情,但是我想你已经探索过了。
或者..。
选项#1:修改父容器
看看是否可以通过临时修改父容器来强制刷新。例如,容器宽度瞬间增加1个像素,然后恢复到原来的宽度。
函数选项#2:查找现有的监听器;查找函数
现有脚本可能有一个侦听器+操作,用于在视口更改大小时执行操作(如您所描述的那样)。检查脚本并找到该侦听器,并查看它在其中运行的内容。它将有一些计算和渲染网格的函数,您可能希望在自己的数据更新函数中调用这些函数。
要找到该监听器,请查找"resize",看看会出现什么。
下面是一个普通的JS调整大小监听器的样子:
var screenWidth = document.documentElement.clientWidth;
resizeRefresh(screenWidth);
function resizeRefresh(width) {
window.addEventListener("resize", function(){
newWidth = document.documentElement.clientWidth;
if (newWidth != width) {
width = newWidth;
// do stuff
}
}, true);
}
发布于 2019-04-12 04:53:15
根据脚本的设置方式,您可以简单地触发resize事件,使其根据当前大小进行重新计算。如果脚本实际上正在跟踪大小并检查更改,那么您将需要找到强制脚本执行网格重新计算的最佳方法,这意味着要检查脚本。这可能很简单,只需在触发resize事件之前更改脚本存储先前记录的视口宽度的变量的值。
仅供参考:如果脚本正在加载到您的页面上,则您确实有权访问该脚本。
window.addEventListener("resize", function(){
// Resize event listener from masonry script
console.log("Masonry grid resized for width "+window.innerWidth);
});
// If using jQuery
$(window).trigger("resize");
// Plain JS version
window.dispatchEvent(new Event('resize'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
https://stackoverflow.com/questions/55402872
复制相似问题