1:如何判断一个元素是否出现在窗口可视范围(浏览器的上边缘和下边缘之间,肉眼可视)。写一个函数 isVisible实现
function isVisible($node){
var windowHeight = $(window).height(); //窗口高度
var scrollTop = $(window).scrollTop(); // 窗口滑动距离
var offsetTop = $node.offset().top; // 相对文档高度
if(offsetTop < windowHeight + scrollTop && offsetTop > scrollTop){
return true;
}
return false;
}
2:当窗口滚动时,判断一个元素是不是出现在窗口可视范围。每次出现都在控制台打印 true 。用代码实现
$(window).on('scroll',function(){
if(isVisible($('p'))){
console.log(true);
}
else {
console.log(false);
}
});
3:当窗口滚动时,判断一个元素是不是出现在窗口可视范围。在元素第一次出现时在控制台打印 true,以后再次出现不做任何处理。用代码实现
<!DOCTYPE html>
<html>
<head>
<script src="//code.jquery.com/jquery-1.9.1.min.js"></script>
<meta charset="utf-8">
<title>JS Bin</title>
<style>
div {
border: 1px solid red;
width: 100px;
height: 1000px;
}
</style>
</head>
<body>
<div>12</div>
<p load='no'>23</p>
</body>
</html>
function isVisible($node){
var windowHeight = $(window).height();
var scrollTop = $(window).scrollTop();
var offsetTop = $node.offset().top;
if(offsetTop < windowHeight + scrollTop && offsetTop > scrollTop){
return true;
}
return false;
}
$(window).on('scroll',function(){
if(isVisible($('p')) && !isloaded($('p')) ){
$('p').attr('load','yes');
console.log(true);
}
else {
console.log(false);
}
});
function isloaded($node) {
if($node.attr('load') === 'yes'){
return true;
}
return false;
}
4: 图片懒加载的原理是什么?
懒加载的实现原理是页面显示的时候,只显示视图范围内的图片资源,对于其他图片则是等进入试图内再进行加载,这样会减少http请求,提高页面的性能。
我们将图片的src放入到一个自定义属性中(data-src),然后判断一个元素是否进入到可视窗口中,当元素出现在可视窗口中,再将这个自定义属性的值赋给图片的src。
5: 实现视频中的图片懒加载效果
var clock;
renderImg();
$(window).on('scroll',function(){
if(clock){
clearTimeout(clock);
}
clock = setTimeout(function() {
renderImg();
console.log(11);
}, 300);
});
function renderImg(){
$('.container img').each(function(){
if(isVisible($(this)) && !isloaded($(this)) ){
loadImg($(this));
}
})
}
function isVisible($img){
var windowHeight = $(window).height();
var scrollTop = $(window).scrollTop();
var offsetTop = $img.offset().top;
if(offsetTop < windowHeight + scrollTop && offsetTop > scrollTop){
return true;
}
return false;
}
function isloaded($img) {
return $img.attr('src') === $img.attr('data-src');
}
function loadImg($img){
$img.attr('src',$img.attr('data-src'));
console.log(1);
}