单张图片加载
确定图片加载的临界条件校验一下图片路径是否正确
<style
>
* {
padding
: 0;
margin
: 0;
}
div
{
width
: 300px
;
height
: 200px
;
margin
: 800px auto
;
}
img
{
width
: 100%;
height
: 100%;
}
</style
>
<body
>
<div
>
<img src
="./img/default.jpg" trueImg
="./img/1.jpg" alt
="">
</div
>
<script src
="../../js/utils.js"></script
>
<script
>
let div
= document
.getElementsByTagName('div')[0];
let img
= document
.getElementsByTagName('img')[0];
let winH
= utils
.win('clientHeight')
let curH
= img
.offsetHeight
;
let cutT
= utils
.offset(img
).top
window
.onscroll = function () {
if (img
.flag
) {
return
}
let winT
= utils
.win('scrollTop');
if (winT
+ winH
> curH
+ cutT
) {
let address
= img
.getAttribute('trueImg');
let newImg
= new Image;
newImg
.src
= address
;
newImg
.onload = function () {
img
.src
= address
;
fadeIn(img
);
img
.flag
= true;
}
}
}
function fadeIn(img
) {
utils
.setCss(img
, 'opacity', 0.1);
let cur
= Number(utils
.getCss(img
, 'opacity'));
var timer
= setInterval(() => {
cur
+= 0.2;
if (cur
>= 1) {
clearInterval(timer
)
}
utils
.setCss(img
, 'opacity', cur
);
}, 200)
}
</script
>
</body
>
多张图片加载
<style
>
* {
padding
: 0;
margin
: 0;
}
div
{
margin
: 500px auto
;
width
: 300px
;
}
img
{
display
: block
;
width
: 300px
;
height
: 200px
;
margin
-bottom
: 10px
;
}
</style
>
<body
>
<div
>
<img src
="./img/default.jpg" trueImg
= "./img/1.jpg" alt
="">
<img src
="./img/default.jpg" trueImg
= "./img/2.jpg" alt
="">
<img src
="./img/default.jpg" trueImg
= "./img/3.jpg" alt
="">
<img src
="./img/default.jpg" trueImg
= "./img/4.jpg" alt
="">
<img src
="./img/default.jpg" trueImg
= "./img/5.jpg" alt
="">
<img src
="./img/default.jpg" trueImg
= "./img/6.jpg" alt
="">
</div
>
<script src
="../../js/utils.js"></script
>
<script
>
let imgs
= document
.getElementsByTagName('img');
let winH
= utils
.win('clientHeight');
function dealy(){
for (var i
= 0; i
< imgs
.length
; i
++) {
dealyImg(imgs
[i
])
}
}
function dealyImg (img
){
if(img
.flag
){
return
}
let curH
= img
.offsetHeight
;
let curT
= utils
.offset(img
).top
;
let winT
= utils
.win('scrollTop');
if(winH
+winT
>curH
+curT
){
let address
= img
.getAttribute('trueImg');
let newImg
= new Image;
newImg
.src
= address
;
newImg
.onload = function(){
img
.src
= address
;
img
.flag
= true;
newImg
= null;
fadeIn(img
)
}
}
}
function fadeIn(img
){
utils
.setCss(img
, 'opacity', 0.05);
let cur
= Number(utils
.getCss(img
,'opacity')) ;
var timer
= setInterval(()=>{
cur
+=0.05;
if(cur
>=1){
clearInterval(timer
)
}
utils
.setCss(img
, 'opacity', cur
);
},50)
}
dealy()
window
.onscroll
= dealy
</script
>
</body
>
瀑布流
CSS
<style
>
* {
padding
:0;
margin
: 0;
}
ul
{
list
-style
: none
;
}
.container
{
width
: 840px
;
margin
: auto
;
background
: #cccccc0a
;
overflow
: hidden
;
}
.container ul
{
width
:19%;
margin
:0 0.5%;
float
:left
;
}
.container ul li
{
width
:100%;
margin
-top
:10px
;
box
-shadow
: 5px
5px
5px
rgba(0,0,0,.3);
}
.container ul li img
{
width
:100%;
height
: 100%;
display
: block
;
background
: url("images/timg.gif") no
-repeat center
;
background
-size
: 60px
60px
;
transition
: all
.3s
;
}
.container ul li
:hover
{
box
-shadow
: 5px
5px
5px
rgba(0,0,0,.6);
}
.container ul li img
:hover
{
transform
: scale(1.05);
}
</style
>
</head
>
<body
>
<div id
="container" class="container">
<ul
></ul
>
<ul
></ul
>
<ul
></ul
>
<ul
></ul
>
<ul
></ul
>
</div
>
<script src
="utils.js"></script
>
<script src
="./index.js"></script
>
</body
>
JS
let ulList
= document
.getElementsByTagName('ul');
ulList
= utils
.toArray(ulList
);
console
.log(ulList
)
let data
= null;
let xhr
= new XMLHttpRequest();
xhr
.open("get",'data.txt',false);
xhr
.onreadystatechange = function(){
if(xhr
.readyState
=== 4 && /^2\d{2}/.test(xhr
.status
)){
data
= JSON.parse(this.responseText
);
}
}
xhr
.send();
console
.log(data
)
function bindHtml(){
for (var i
= 0; i
< 50; i
++) {
let index
= Math
.round(Math
.random()*9);
let curObj
= data
[index
];
let li
= document
.createElement('li');
let img
= document
.createElement('img');
img
.setAttribute('trueImg', curObj
.src
);
img
.className
= 'bg';
img
.style
.height
= Math
.round(Math
.random()*(250-180)+180)+'px';
li
.appendChild(img
);
ulList
.sort((a
,b
)=> {
return a
.scrollHeight
- b
.scrollHeight
})
ulList
[0].appendChild(li
);
}
}
bindHtml();
var imgs
= document
.getElementsByClassName("bg");
function dealy(){
for (var i
= 0; i
< imgs
.length
; i
++) {
dealyImg(i
);
}
}
let winH
= utils
.win('clientHeight');
function dealyImg(index
){
let curImg
= imgs
[index
];
if(curImg
.flag
){
return
}
let curH
= curImg
.offsetHeight
let curT
= utils
.offset(curImg
).top
let winT
= utils
.win('scrollTop');
if(curH
+curT
<winT
+winH
){
var address
= curImg
.getAttribute('trueImg');
var newImg
= new Image;
newImg
.src
= address
;
newImg
.onload = function(){
curImg
.src
= address
;
curImg
.flag
= true;
fadeIn(curImg
);
}
}
}
function fadeIn(img
){
utils
.setCss(img
,'opacity', 0.1);
let cur
= Number(utils
.getCss(img
,'opacity'));
var timer
= setInterval(()=>{
cur
+=0.2;
if(cur
>=1){
clearInterval(timer
);
utils
.setCss(img
, 'opacity', 1);
};
utils
.setCss(img
, 'opacity', cur
);
}, 200);
}
dealy();
window
.onscroll = function(){
dealy();
let bodyH
= document
.body
.scrollHeight
;
let winT
= utils
.win('scrollTop');
if(winT
+ winH
+300>bodyH
){
bindHtml();
}
}
utils
工具方法库,在使用中,利用自执行函数和return引用类型值形成闭包。
var utils
= (function () {
function toArray(likeAry
) {
var ary
= [];
try{
ary
= Array
.prototype
.slice
.call(likeAry
);
}catch(e
){
for(var i
=0;i
<likeAry
.length
;i
++){
ary
[ary
.length
] = likeAry
[i
];
}
};
return ary
;
};
function toJSON(str
) {
return "JSON" in window
? JSON.parse(str
):eval("("+str
+")");
};
function getCss(curEle
,attr
) {
var val
;
if("getComputedStyle" in window
){
val
= getComputedStyle(curEle
)[attr
];
}else{
if(attr
==="opacity"){
var cur
= curEle
.currentStyle
["filter"];
var reg
= /alpha\(opacity=(\d+(\.\d+)?)\)/;
val
=reg
.exec(cur
)[1]/100;
}else{
val
= curEle
.currentStyle
[attr
];
}
}
if(!isNaN(parseFloat(val
))){
val
= parseFloat(val
);
}
return val
;
}
function setCss(curEle
,attr
,value
) {
if(attr
==="opacity"){
curEle
.style
[attr
] = value
;
curEle
.style
["filter"] = "alpha(opacity="+value
*100+")";
return;
}
var reg
= /^((width|height)|((margin|padding)?(top|left|right|bottom)?))$/i;
if(reg
.test(attr
)){
value
= value
+ "px";
}
curEle
.style
[attr
] = value
;
}
function setGroupCss(curEle
,options
) {
if(typeof options
==="object"){
for(var key
in options
){
setCss(curEle
,key
,options
[key
])
}
}
}
function css() {
var curEle
= arguments
[0],
val
= null,
attr
= null,
length
= arguments
.length
;
if(length
===3){
val
= arguments
[2];
attr
= arguments
[1];
setCss(curEle
,attr
,val
);
return;
}
if(length
===2&&typeof arguments
[1]=== "object"){
val
= arguments
[1];
setGroupCss(curEle
,val
);
return;
}
attr
= arguments
[1];
return getCss(curEle
,attr
)
};
function offset(curEle
) {
var l
= curEle
.offsetLeft
;
var t
= curEle
.offsetTop
;
var p
= curEle
.offsetParent
;
while(p
){
if(!/MSIE 8.0/.test(navigator
.userAgent
)){
l
+=p
.clientLeft
;
t
+=p
.clientTop
;
}
l
+=p
.offsetLeft
;
t
+=p
.offsetTop
;
p
= p
.offsetParent
;
}
return {left
:l
,top
:t
}
}
function win(attr
,value
) {
if(typeof value
==="undefined"){
return document
.documentElement
[attr
] || document
.body
[attr
]
}
document
.documentElement
[attr
] = value
;
document
.body
[attr
] = value
;
};
return {
toArray
: toArray
,
toJSON
: toJSON
,
getCss
:getCss
,
setCss
:setCss
,
setGroupCss
:setGroupCss
,
css
:css
,
offset
:offset
,
win
:win
}
})();
转载请注明原文地址:https://ipadbbs.8miu.com/read-60517.html