一个兼容IE
// 获取滚动高度 var scrollTop=document.body.scrollTop || document.documentElement.scrollTop; // 获取可视窗口的高度 var height=document.body.clientHeight || document.documentElement.clientHeight; // a || b 这种语法 看例子 前一个值存在,取前一个值,不然取后一个值 var result = true || false // true var result = false || false // false var result = true || true // true var result = false || true // true
代码没问题,搞错了
截一下图
2个问题
1:下拉的时候不断刷新 是因为,onscroll判断时,应该用if(checkScrollSlide()){}来做判断,checkScrollSlide()这个方法返回值来确定是否加载,视频中amy老师是用checkScrollSlide这个未定义的变量来判断的,未定义的变量默认未true,所以导致下拉不断刷新的错误。
2:加上去的图没有按照css的格式,这最大的可能就是你没有为新创建的div添加className,因为你的样式是以class来定义的~
我觉得啥也不用写了,直接自己排列在第二行了
我们找的不是处于最底部的box元素,假设最底部的box元素高度特别长,那么通过它获得的 offsetTop+(offsetHeight/2) 的值会很大,我们就必须向下拖动更多的距离,可是这个时候, 其它列 由于没有加载,会在 列 的最下面显示出 大片的空白区域,这不是我们想要达到的效果 。 我们需要的是在 列的底部空白出现之前就进行下载,由于最后一个box元素必然是定位在 之前最短的一列中,这一列的高度 再加上 最后一个box 元素自身的高度的 一半 ,与其它列的高度相比,不会有太大的 偏差,这个时候加载 就比较合适了
在滚动添加过程中在调用一次waterfall('main','box');
后面调用的是value值,你可以这样做:
var dataInt={'data':[{'src':'0.jpg'},{'src':'1.jpg'},{'src':'2.jpg'},{'src':'3.jpg'}]};这些按照数写,不要加具体路径,后面加
oimg.src="../images/"+dataInt.data[i].src;
oImg.src="file:///C:/Users/Administrator/YMH/1/"+dataInt.data[i].src;
(1)浏览器出于安全考虑,不会打开file://开头的本地图片的
(2)不能访问根目录以外的文件夹下的图片
你听完课还是看不懂老师的代码吗?它知识变量名字不一样而已.
var da = {"data":[{"src":"1H.ico"},{"scr":"DD.ico"},{"src":"GM.ico"}]}; 里面的第二个src写错了!
最后一排水平对齐?
那你就得限制图片的数量了。可以写个JS检测图片数量,达到你想要的数量后再设置一下最后一排的高度就可以了
M每次拖到最后一张图片的中间位置就显示后面内容
重新打开当然是从最上面显示的啊,但是不能每次都把界面关了再重新打开啊。。。
改为if(checkScrollSlide(){}就行了吧
谢谢,JQuery解决了,但是JS原生的还是有同样的问题,JS原生那里cols本来就是用document获取的啊,
var cols = Math.floor(document.documentElement.clientWidth/oBoxW);
只看图片不能调试,看不出来哪里有问题。有没有报错信息?
你的oPic.className = 'pic',是大写,和html里一致吗?
多console.log(),看看oImg的src输出是否正确,别的也log()一下看看。
box的class设置错了
谁调用这个函数或方法,this关键字就指向谁。
详情请参考(http://www.cnblogs.com/justany/archive/2012/11/01/the_keyword_this_in_javascript.html)
如果会后端代码的话只需要把图片的url地址从数据库中查出,再以json格式发送的前台,前台接收展示就可以了。
main里边的子div没有定义类名box,在调用waterfall函数时传入的第二个参数box是不存在的,所以没有效果,而且main里边的后代元素也没有定义类名,样式效果也没有
if(i=16) 那条件永远满足啊
如果i等于了json里面最后一个的长度值时,用if判断,后面直接写break;应该就可以直接跳出来了。。。。我也不确定,你可以试一下
解决了,因为在js文件中我一开始写的是$(function(){}), 不是window.onload = function(){}
这个位置有源码
已解决,在
window.onscroll=function(){ if(checkScrollSlide()){
这段语句中if里面的函数加个括号就可以了。