我有以下PHP和JS:
<?php
// Here's where the array of objects is built
$depthElements = array(
array('http://placehold.it/300x300',-150,100,0.8),
array('http://placehold.it/200x300',-270,458,0.7)
);
?>
<script>
var depthElems = <?php echo(json_encode($depthElements)); ?>;
</script>
它构建一个多维PHP数组,然后将它们打包为JS:
jQuery(document).ready(function($) {
// Create and position the elements on the page
for (element in window.depthElems) {
var a = window.depthElems[element];
$('body').append('<img src="' + a[0] +
'" style="margin-left: ' + a[1] +
'px; top: ' + a[2] +
'px;" data-velocity="' + a[3] +
'" class="depthElem" />');
}
$(document).scroll(function () {
var topDist = $(document).scrollTop();
$('.depthElem').each(function () {
$(this).css('margin-top', -topDist*($(this).attr('data-velocity')+'px'));
});
});
});
这似乎对我有意义,但由于某种原因,页面上有一些我没有要求的额外元素:
他们来自哪里?
答案 0 :(得分:3)
您正在使用for...in
循环遍历数组which is not recommended。结果,你可能会选择一堆你并不意味着要循环的属性,结果就是垃圾附加。
使用常规for循环(for (var i = 0; i < array.length; i++)
),它应该按预期工作。
答案 1 :(得分:1)
for in ...
正在创建问题,因为它也在迭代Array对象的属性。
将for循环更改为:
$.each(window.depthElems, function(i, a){
$('body').append('<img src="' + a[0] +
'" style="margin-left: ' + a[1] +
'px; top: ' + a[2] +
'px;" data-velocity="' + a[3] +
'" class="depthElem" />');
});