jQuery 瀑布流 ajax动态加载 图片格式出错? 400 报错
jQuery 瀑布流 使用ajax加载数据库图片url ajax每次请求到的数据不变时 瀑布流效果没问题。 但当请求到的数据变化时,瀑布流图片格式会重叠 或者相隔很远等等的格式问题,
waterfall.js代码
$(document).ready(function(){
loadMore();
});
$(window).scroll(function(){
if($(document).height() - $(this).scrollTop() - $(this).height()<10)
// alert("123");
loadMore();
});
var dataCount = 1;
function loadMore(){
$.ajax({
url : 'data1.php',
dataType : 'json',
data : {"pageNow":dataCount},
success : function(json)
{
if(typeof json == 'object')
{
var oProduct, $row, iHeight, iTempHeight;
for(var i=0, l=json.length; i<l; i++)
{
oProduct = json[i];
// 找出当前高度最小的列, 新内容添加到该列
iHeight = -1;
$('#stage li').each(function(){
iTempHeight = Number( $(this).height() );
if(iHeight==-1 || iHeight>iTempHeight)
{
iHeight = iTempHeight;
$row = $(this);
}
});
$item = $('<img src="'+oProduct.image+'"><p>'+oProduct.title+'</p>').hide();
$row.append($item);
$item.fadeIn(1000);
}
}
dataCount++;
}
});
}
<body> <ul id="stage"> <li></li> <li></li> </ul> <!-- <div class="row"> <img src="img/1.jpg" > <img src="img/2.jpg" > <img src="img/3.jpg"> </div> --> </body>
css:
*{
margin: 0;
padding: 0;
}
body{
width: 100%;
height: auto;
}
#stage{
width: 100%;
margin:0 ;
padding:0;
}
#stage li{
list-style: none;
float: left;
width: 50%;
padding:1%;
/*background-color: silver;*/
}
#stage li img{
border: 1% solid #cccccc;
box-shadow: 0 0 5px #ccc;
border-radius: 6px;
width: 96%;
margin: 1%;
}
#stage li p{
text-align: center;
}
php代码:
<?php
require_once "sqlHelper.php";
require_once "Paging.class.php";
$paging=new Paging();
$paging->pageNow=1;
if(!empty($_GET['pageNow'][0])){
$paging->pageNow=$_GET['pageNow'][0];
}
$paging->pageSize=8;
$db = new SqlHelper();
$sql = "select url,nickname from imgurl where 1=1 ";
$sql2="select count(1) from imgurl where 1=1";
$sql .=" limit ".($paging->pageNow-1)*$paging->pageSize.",".$paging->pageSize;
$db->execute_dql_paging($sql,$sql2,$paging);
$db->close_connect();
$data = array();
foreach ($paging->res_array as $key => $value) {
$data[] = (object)array('image'=>$value['url'],'title'=>$value['nickname']);
}
$json = array();
for($i=0;$i<count($data);$i++)
{
$json[] = $data[$i];
}
echo json_encode( $json );
?>
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
console.log一下每次的iHeight看看.
由于图片加载是有网络延时的, 所以当添加第一个图片后, 图片还没来得及加载, 就进入第二个图片的循环了, 此时的高度计算很可能是没有算上图片的真实高度的, 即只算上了title的p元素高度, 所以每次数据一样时, title一样, 输出也看起来正常, 而每次数据不一样的话, 就有可能因为title的高度不一样而导致排版在图片加载后走样了.
一个快速的验证方法是, 不加图片只加title, 看看数据不一样的情况下排版是否如预期.
######因为图片加载慢,未加载的时候高度为0,你就把瀑布流每块的位置定死了,等到图片都加载完成后自然会重叠。两种解决办法:1.提前预留好图片高度。2.当图片都加载完成后再重新计算下每块的位置。
如果你想做响应式网站的话,第一种方法显然不好办,因为你不知道要留多少高度,所以还是看下第二种方法吧。我喽了一眼WaterFall这插件,发现有个“checkImagesLoaded”方法,你可以试试我没用过,我用的是UIKit的“动态网格”做瀑布流——http://www.qudaodao.com
######因为图片加载慢,未加载的时候高度为0,你就把瀑布流每块的位置定死了,等到图片都加载完成后自然会重叠。两种解决办法:1.提前预留好图片高度。2.当图片都加载完成后再重新计算下每块的位置。
如果你想做响应式网站的话,第一种方法显然不好办,因为你不知道要留多少高度,所以还是看下第二种方法吧。我喽了一眼WaterFall这插件,发现有个“checkImagesLoaded”方法,你可以试试我没用过,我用的是UIKit的“动态网格”做瀑布流——http://www.qudaodao.com