用canvas实现图片的懒加载并且下滑到据底部60px的时候再次加载数据,模仿UC浏览器的新闻加载。

  完整代码:https://github.com/dirkhe1051931999/writeBlog/tree/master/canvasloadimg

  html结构
<section class="productul" id="productul">
<input type="hidden" id="pagenumlength" value="1">
<ul id="scrollAdd">
<li>
<a href="#">
<div class="leftimage fl">
<canvas data-src="./product1.png"></canvas>
</div>
<div class="productcontent fr">
<p class="ptitle ">这是标题</p>
<p class="pdes ">简介简介简介简介简介简介简介简介简介简介简介简介简介简介</p>
<p class="pprice ">这是注释</p>
</div>
</a>
</li>
<li>
<a href="#">
<div class="leftimage fl">
<canvas data-src="./product1.png"></canvas>
</div>
<div class="productcontent fr">
<p class="ptitle ">这是标题</p>
<p class="pdes ">简介简介简介简介简介简介简介简介简介简介简介简介简介简介</p>
<p class="pprice ">这是注释</p>
</div>
</a>
</li>
<li>
<a href="#">
<div class="leftimage fl">
<canvas data-src="./product1.png"></canvas>
</div>
<div class="productcontent fr">
<p class="ptitle ">这是标题</p>
<p class="pdes ">简介简介简介简介简介简介简介简介简介简介简介简介简介简介</p>
<p class="pprice ">这是注释</p>
</div>
</a>
</li>
</ul>
<div class="loaddiv"></div>
</section>
  方法
var ajaxState = true,
pageSize = 5,
currentpage =1;
// canvas懒加载
function loadCanvas () {
var imglength = $("#productul").find("canvas").length;
if (imglength>0) {
$("#productul").find("canvas").each(function(){
var imgSrc=$(this).data("src");
var imageObj = new Image();
// 当前获取的canvas
imageObj.canvs = $(this)[0];
var cvs = imageObj.canvs.getContext("2d");
if (cvs) {
imageObj.onload = function(){
imageObj.canvs.width = this.width;
imageObj.canvs.height = this.height;
cvs.drawImage(this,0,0);
// 绘制成功后 把loading取消
$(imageObj.canvs).css("background-image","none");
}
imageObj.src=imgSrc;
}
})
}
}
// ajax请求数据(模拟了一个接口)
function getData(pagenumber){
$.ajax({
type:"get",
url:"./test.json",
data:{
page:pagenumber,
row:pageSize,
},
dataType:"json",
success:function(result){
$(".loaddiv").hide();
if (result.length>0) {
// 数据加载成功,设置标志位
ajaxState=true;
insertDiv(result);
loadCanvas();
}else{
// 没有数据,不执行,设置标志位
$("#pagenumberlength").val("0");
}
},
beforeSend:function(){
$(".loaddiv").show();
},
error:function(){
$(".loaddiv").hide();
}
})
}
// dom 插入
function insertDiv(json){
var $mainDiv = $("#scrollAdd");
var html = "";
var showlength =5;
if (json.length<5) {
showlength = json.length;
}
for(var i=0;i<showlength;i++){
html += '<li><a href="#">'+
'<div class="leftimage fl"><canvas data-src="./product1.png" ></canvas></div>'+
'<div class="productcontent fr">'+
'<p class="ptitle ">这是标题</p>'+
'<p class="pdes ">简介简介简介简介简介简介简介简介简介简介简介简介简介简介</p>'+
'<p class="pprice ">这是注释</p>'+
'</div></a></li>';
}
$mainDiv.append(html);
}
// 据底部60判断
function scrollHandler(){
// console.log(parseInt(scrollT)+parseInt(winHeight)+50>=parseInt(pageH) && ajaxState) var pageH = $(document).height();
// 滚动条的top
var scrollT = $(window).scrollTop();
var winHeight = $(window).height();
if (parseInt(scrollT)+parseInt(winHeight)+60>=parseInt(pageH) && ajaxState){
if ($("#pagenumlength").val()=="1") {
// 滚动到底部,设置标志位
ajaxState =false;
currentpage++;
getData(currentpage);
}else{
return;
}
}
}
  执行代码
    $(function(){
loadCanvas();
$(window).scroll(scrollHandler);
$("#productul").on("touchmove",scrollHandler);
})

  注意:$(document).height() = $(window).height() + $(window).scrollTop()

      其中$(document).height()是网页高度, $(window).height()是可视窗口高度,$(window).scrollTop()是可视窗口距顶端高度

  

学习 | canvas实现图片懒加载 && 下滑底部加载的更多相关文章

  1. 前端性能优化--图片懒加载(lazyload image)

    话说前头: 上次写了一篇webpack的学习心得,webpack能做到提升前端的性能,其模块打包最终生成一个或少量的文件能够减少对服务端的请求.除此之外,本次的图片懒加载(当然不仅限于图片,还可以有视 ...

  2. 原生js开发,无依赖、轻量级的现代浏览器图片懒加载插件,适合在移动端开发使用

    优势 1.原生js开发,不依赖任何框架或库 2.支持将各种宽高不一致的图片,自动剪切成默认图片的宽高 比如说你的默认图片是一张正方形的图片,则各种宽度高度不一样的图片,自动剪切成正方形. 完美解决移动 ...

  3. JavaScript——图片懒加载

    前言 有一个朋友问我这个问题,刚好有时间,现在就简单的写个Demo~ github | https://github.com/wangyang0210/bky/tree/picLoadLazy 内容 ...

  4. 原生js实现图片懒加载+加入节流

    这两天在学习图片的懒加载实现,看了很多大佬的博客,终于有了点成果.现在用了其中一位大佬的文章中的代码实现了图片懒加载并且在其基础上加入了节流函数. 原理就不多讲了,有需要的可以去大佬的文章看看.大佬文 ...

  5. [jQuery插件]手写一个图片懒加载实现

    教你做图片懒加载插件 那一年 那一年,我还年轻 刚接手一个ASP.NET MVC 的 web 项目, (C#/jQuery/Bootstrap) 并没有做 web 的经验,没有预留学习时间, (作为项 ...

  6. 学习EF之贪懒加载和延迟加载(2)

    通过昨天对EF贪婪加载和延迟加载的学习,不难发现,延迟加载还是很好用的,但是问题也就来了,有的时候我们只需要加载一个实体,不需要和他相关的外部实体,这时候我们来看看EF延迟加载时怎么作用的吧 打开pr ...

  7. 前端实现图片懒加载(lazyload)的两种方式

    在实际的项目开发中,我们通常会遇见这样的场景:一个页面有很多图片,而首屏出现的图片大概就一两张,那么我们还要一次性把所有图片都加载出来吗?显然这是愚蠢的,不仅影响页面渲染速度,还浪费带宽.这也就是们通 ...

  8. jquery实现简单瀑布流布局(续):图片懒加载

    # jquery实现简单瀑布流布局(续):图片懒加载 这篇文章是jquery实现简单瀑布流布局思想的小小扩展.代码基于前作的代码继续完善. 图片懒加载就是符合某些条件时才触发图片的加载.最常见的具体表 ...

  9. webapp图片懒加载实现

    图片懒加载在webapp上非常流行,应用的很广泛. 实现图片懒加载功能:zepto.picLazyLoad.min.js 引入类库 <script src="1.1.3/zepto.m ...

随机推荐

  1. vue自定义可输入的选择框组件

    vue自定义可输入的选择框组件 props: 属性 说明 类型 默认值 selectDataList 下拉框中的内容 Array 空数组([]) value 输入框中的内容 String 空字符串(& ...

  2. 深度优先搜索(dfs)与出题感想

    在3月23号的广度优先搜索(bfs)博客里,我有提到写一篇深搜博客,今天来把这个坑填上. 第一部分:深度优先搜索(dfs) 以上来自百度百科. 简单来说,深度优先搜索算法就是——穷举法,即枚举所有情况 ...

  3. Spring Boot 教程 - 文件上传下载

    在日常的开发工作中,基本上每个项目都会有各种文件的上传和下载,大多数文件都是excel文件,操作excel的JavaAPI我用的是apache的POI进行操作的,POI我之后会专门讲到.此次我们不讲如 ...

  4. asp.net core 应用docke部署到centos7

    前言 前期准备 win10 (不要安装hyper-V) VMware-Workstation-Pro/15.0 Xshell6 (非必需) VS2019 以上环境请自行安装 都是默认安装没什么可说的 ...

  5. Jmeter 常用函数(17)- 详解 __substring

    如果你想查看更多 Jmeter 常用函数可以在这篇文章找找哦 https://www.cnblogs.com/poloyy/p/13291704.htm 作用 从字符串中获取指定范围的子串 语法格式 ...

  6. linux服务器核心知识

    电脑:辅助人脑的工具 现在的人们几乎无时无刻都会碰电脑!不管是桌上型电脑(桌机).笔记型电脑(笔电).平板电脑.智慧型手机等等,这些东西都算是电脑.虽然接触的这么多,但是,你了解电脑里面的元件有什么吗 ...

  7. RabbitMQ高级之如何保证消息可靠性?

    人生终将是场单人旅途,孤独之前是迷茫,孤独过后是成长. 楔子 本篇是消息队列RabbitMQ的第四弹. RabbitMQ我已经写了三篇了,基础的收发消息和基础的概念我都已经写了,学任何东西都是这样,先 ...

  8. Java枚举简述

    Java 枚举(enum) Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等. Java 枚举类使用 enum 关键 ...

  9. 重写简易的confirm函数

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. AD18使用原理图优先选项( Preference)调整原理图纸张大小失效问题解决

    1.创建新的原理图纸后,在当前点击更改并不会生效 2.想要生效需要去原理图纸的文档详细属性中更新即可生效!以下两种方式可以打开文档选项按钮. a.O->D 打开文档选项 b.右下角选择Prope ...