1+ <!DOCTYPE html>
2+ < html lang ="en ">
3+ < head >
4+ < meta charset ="UTF-8 ">
5+ < title > </ title >
6+ < style >
7+ * {
8+ margin : 0 ;
9+ padding : 0 ;
10+ list-style : none;
11+ }
12+ img {
13+ border : none;
14+ }
15+ div {
16+ width : 1100px ;
17+ margin : 0 auto;
18+ }
19+ div ul {
20+ width : 200px ;
21+ margin : 0 10px ;
22+ float : left;
23+ }
24+ div ul li {
25+ width : 100% ;
26+ margin-bottom : 10px ;
27+ background : url ("img2/default.gif" ) no-repeat center # e1e1e1 ;
28+ }
29+ div ul li img {
30+ width : 100% ;
31+ }
32+ .btn {
33+ width : 80px ;
34+ height : 80px ;
35+ background : darkmagenta;
36+ color : white;
37+ border-radius : 50% ;
38+ text-align : center;
39+ line-height : 80px ;
40+ position : fixed;
41+ right : 20px ;
42+ bottom : 20px ;
43+ font-size : 30px ;
44+ display : none;
45+ }
46+ </ style >
47+ </ head >
48+ < body >
49+ < div >
50+ < ul >
51+ <!--<li><img src="" realImg="img2/1.jpg" alt=""/></li>-->
52+ </ ul >
53+ < ul > </ ul >
54+ < ul > </ ul >
55+ < ul > </ ul >
56+ < ul > </ ul >
57+ </ div >
58+ < script src ="utils.js "> </ script >
59+ < div id ="btn " class ="btn "> toTop</ div >
60+ < script >
61+ var aUl = document . getElementsByTagName ( 'ul' ) ;
62+ var aLi = document . getElementsByTagName ( 'li' ) ;
63+ var aImg = document . getElementsByTagName ( 'img' ) ;
64+ var oBtn = document . getElementById ( 'btn' ) ;
65+ var timer = null ;
66+ var bOk = false ;
67+ var ary = [
68+ { imgSrc :'img2/1.jpg' } ,
69+ { imgSrc :'img2/2.jpg' } ,
70+ { imgSrc :'img2/3.jpg' } ,
71+ { imgSrc :'img2/4.jpg' } ,
72+ { imgSrc :'img2/5.jpg' } ,
73+ { imgSrc :'img2/6.jpg' } ,
74+ { imgSrc :'img2/7.jpg' } ,
75+ { imgSrc :'img2/8.jpg' } ,
76+ { imgSrc :'img2/9.jpg' } ,
77+ { imgSrc :'img2/10.jpg' } ,
78+ ] ;
79+ //1.创建一个元素li,内容为图片;为了保证背景图比较好看,给li设置随机高度;
80+ function createLi ( ) {
81+ var oLi = document . createElement ( 'li' ) ;
82+ oLi . style . height = utils . rnd ( 100 , 180 ) + 'px' ;
83+ oLi . innerHTML = '<img src="" realImg="' + ary [ utils . rnd ( 0 , 9 ) ] . imgSrc + '" alt=""/>' ;
84+ return oLi ;
85+ }
86+ //2.创建50个li,每创建一个,都插入ul中最短的;
87+ function li50 ( ) {
88+ for ( var i = 0 ; i < 50 ; i ++ ) {
89+ var oLi = createLi ( ) ;
90+ //1.类数组转数组
91+ var ary = utils . makeArray ( aUl ) ;
92+ //2.数组排序
93+ ary . sort ( function ( a , b ) {
94+ return a . offsetHeight - b . offsetHeight ;
95+ } ) ;
96+ //3.把oLi插入最短的ul;
97+ ary [ 0 ] . appendChild ( oLi ) ;
98+ }
99+ }
100+ //3.显示图片的封装
101+ function showImg ( ) {
102+ //每张图片到body顶部的距离+图片自身的高度《scrollTop+clientHeight;
103+ for ( var i = 0 ; i < aImg . length ; i ++ ) {
104+ var scrollBottom = utils . win ( 'scrollTop' ) + utils . win ( 'clientHeight' ) ;
105+ var imgPos = utils . offset ( aImg [ i ] ) . top + aLi [ i ] . offsetHeight ;
106+ if ( imgPos < scrollBottom ) {
107+ lazyImg ( aImg [ i ] ) ;
108+ }
109+ }
110+ }
111+ function lazyImg ( img ) {
112+ if ( img . loaded ) return ;
113+ //1.创建临时img标签
114+ var tmpImg = new Image ;
115+ //2.给临时img标签赋值正确的地址
116+ tmpImg . src = img . getAttribute ( 'realImg' ) ;
117+ //3.校验地址
118+ tmpImg . onload = function ( ) {
119+ //1.把正确的地址赋值给img;
120+ img . src = this . src ;
121+ //让img父级的高度为auto;
122+ img . parentNode . style . height = 'auto' ;
123+ //2.释放临时标签tmpImg
124+ tmpImg = null ;
125+ //3.避免重复加载
126+ img . loaded = true ;
127+ }
128+ }
129+ function toTop ( ) {
130+ var target = utils . win ( 'scrollTop' ) ;
131+ var duration = 1000 ;
132+ var interval = 30 ;
133+ var step = target / duration * interval ;
134+ //开启定时器,每次在最新的距离上减去step步长
135+ clearInterval ( timer ) ;
136+ timer = setInterval ( function ( ) { //只有定时器在影响onscroll事件
137+ var curTop = utils . win ( 'scrollTop' ) ;
138+ if ( curTop <= 0 ) {
139+ clearInterval ( timer ) ;
140+ return ;
141+ }
142+ curTop -= step ;
143+ utils . win ( 'scrollTop' , curTop ) ;
144+ bOk = false ;
145+ } , interval )
146+ }
147+ //..........调用......
148+ li50 ( ) ;
149+ showImg ( ) ;
150+ oBtn . onclick = toTop ;
151+ window . onscroll = function ( ) { //能触发滚轮事件有两种情况:手动+定时器
152+ //计算浏览器卷去的高度+可视区的高度 跟 内容的高度进行比较
153+ var scrollBottom = utils . win ( 'scrollTop' ) + utils . win ( 'clientHeight' ) ;
154+ showImg ( ) ;
155+ if ( bOk ) clearInterval ( timer ) ;
156+ bOk = true ;
157+ //第一屏按钮隐藏,当滚动条滚动距离超过一屏,显示按钮
158+ if ( utils . win ( 'scrollTop' ) > utils . win ( 'clientHeight' ) ) {
159+ oBtn . style . display = 'block'
160+ } else {
161+ oBtn . style . display = 'none'
162+ }
163+ if ( scrollBottom >= document . body . scrollHeight ) {
164+ li50 ( ) ;
165+ }
166+ }
167+ </ script >
168+ </ body >
169+ </ html >
0 commit comments