当前位置: 首页 > 编程日记 > 正文

照片墙瀑布流加载与阻止加载

网上大部分主流的瀑布流应用基本都是由后端在提供图片地址的同时提供图片宽高,这样,前端不必等待图片渲染完成,可以根据图片的宽高先把装载图片的容器或父节点先放上页面,完成基础性的布局,再让图片以渐变或其他方式逐步呈现。但如果前端在获取图片数据的同时无法得知其宽高,势必要遭遇很多尴尬的状况。

本文记述一些笔者在照片墙项目中,未知图片宽高的情况下,处理瀑布流的加载与阻止加载的一些方法。不知道是否有同道中人遇到过类似的情况,希望抛砖引玉,听取各位的想法和意见。

如果前端在图片渲染前不知道宽高,首先就意味着必须监听图片onloadonload 后才能知道图片宽高,onload callback才能把图片放上页面。这样一来,由于每张照片都要监听 onload , 瀑布加载的性能与效率就等于输在起跑线上,但貌似也只能监听onload

监听onload 带来的麻烦:

由于 onload 的 callback函数是异步执行的,在切换照片的搜索条件,比如 性别,年龄,城市等,有可能会造成上一轮的照片还在加载,就会造成类似明明切换了女性的照片,但仍能看到几张男性照片的局面。如此一来,必须要在每次切换条件时,先阻止上一轮的图片加载,再开始加载新一轮。以下是兼容 ie 的阻止图片加载(下载)的代码:

参考:

http://stackoverflow.com/questions/3146200/stop-loading-of-images-on-a-hashchange-event-via-javascript-or-jquery

红色字体的请求代表被阻止下载的图片请求,Status 显示为 canceled。图片加载地越快,切换条件时需要停止的未加载的图片的数量就越少。

因 imgs 的 onload 做了如此多的麻烦事后,瀑布流加载在性能上也损失不少,是否有办法从别处弥补回一些损失。一般的照片墙,初始时向后端请求1屏,随着用户拉动滚动条至屏幕出现空白区域后,再向后端请求新一屏的照片数据,如此一来,尤其是当图片及ajax数据请求缓慢的情况下,势必会让用户的视觉在屏幕的空白区域停留过久,影响体验。那么是不是可以减少 http 请求数,比如后端一次性传 屏的数据,而前端 append 图片还是随着用户拉动滚动条,一屏一屏地来,其实就是图片的“懒加载”,即需即取,代码大略如下:

——获取数据时,可先将后端返回的每一张图片的地址保存在一个自建的图片属性中,  如:tmpsrc

——当用户拉动滚动条至屏幕出现空白区域后,再将一屏地图片附上正式的src,开始下载:

完!

转载于:https://www.cnblogs.com/miyalinlin/archive/2013/05/24/3096475.html

相关文章:

利用Nginx实现简易负载均衡

基本思路如下: 比如我们有三个服务器: 其中: 130.251是反向代理转发服务器 130.251和130.238分别是负载服务器 Mysql服务器没有标出来, 为方便区分,我们先把1号负载的首页写成111111111 2号负载的首页写成222222 然后我们现在控制130.251, 把nginx配置文…

两行代码搞定iOS自定义HUD风格动画弹窗(支持选择记录) - SKChoosePopView的使用和实现思路

作者 ShevaKuilin 关注 2017.03.25 18:28* 字数 2014 阅读 270评论 0喜欢 23さらい屋五葉原文地址----> MyBlog HUD风格的选项弹窗是我们在日常开发中经常会碰到的一类需求,通常因为项目周期等因素,很少会专门抽出时间来对此类弹窗进行专门的定制开发…

yii2框架随笔29

今天我们来看UrlRule.php <?php /*** link http://www.yiiframework.com/* copyright Copyright (c) 2008 Yii Software LLC* license http://www.yiiframework.com/license/*/ namespace yii\web; use Yii; use yii\base\Object; use yii\base\InvalidConfigException; /*…

八种简易健康减肥瘦身法

①原地跑&#xff0c;紧实大腿肌肉&#xff1b;②上楼梯&#xff0c;瘦小腿、大腿、臀&#xff1b;③步行&#xff0c;瘦腿、腰&#xff1b;④瑜珈&#xff0c;瘦全身&#xff1b;⑤跳舞&#xff0c;瘦全身&#xff1b;⑥跳绳&#xff0c;瘦大腿、小腿&#xff1b;⑦晨操&#…

LaZagne检测windows本地存储的密码

LaZagne项目是用于检索存储在本地计算机上的大量密码的开源应用程序。 每个软件使用不同的技术&#xff08;明文&#xff0c;API&#xff0c;自定义算法&#xff0c;数据库等&#xff09;存储其密码。 该工具的开发是为了找到最常用的软件的密码。 下载到windows机器&#xff0…

通知提示SCPromptView

作者 陈小翰 关注 2017.03.24 18:01 字数 138 阅读 62评论 0喜欢 1SCPromptView SCPromptView : 显示在顶部的提示控件 你的star是我最大的动力 effect.gif安装 手动安装 下载源码&#xff0c;将SCPromptView文件夹拖进项目 CocoaPod pod SCPromptView 使用 SCPromptView 的用…

4566: [Haoi2016]找相同字符 SAM

折腾了好久。不过收获还是很多的。第一次自己去画SAM所建出来fail树。深入体会了这棵树的神奇性质。 当然&#xff0c;我最终靠着自己A掉了。&#xff08;这是我第一次推SAM的性质&#xff08;以前都是抄别人的&#xff0c;感觉自己好可耻&#xff09;&#xff0c;不过感觉好像…

NYOJ-232 How to eat more Banana

How to eat more Banana 时间限制&#xff1a;1000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;4描述A group of researchers are designing an experiment to test the IQ of a monkey. They will hang a banana at the roof of a building, and at the mean time, …

UIView Animation

作者 嘿o大远 关注 2017.03.23 17:02* 字数 402 阅读 47评论 1喜欢 3今天总结一下UIView动画就是 UiView动画是基于高层API封装进行封装的,对UIView的属性进行修改时候所产生的动画. 基本动画 下面两种方法是最常用的两种. (void)animateWithDuration:(NSTimeInterval)duratio…

[转]Ext Grid控件的配置与方法

http://www.blogjava.net/wangdetian168/archive/2011/04/12/348651.html 1、Ext.grid.GridPanel 主要配置项&#xff1a; store&#xff1a;表格的数据集 columns&#xff1a;表格列模式的配置数组&#xff0c;可自动创建ColumnModel列模式 autoExpandColumn&#xff1a;自动充…

永久设置SecureCRT的背景色和文字颜色方案

对于默认的连接颜色感觉不舒服&#xff0c;一通乱搞&#xff0c;总结出这些。 一、对于临时设置&#xff0c;可以如下操作&#xff1a; 首先options -- session - appearance 此处可以设置临时的窗口背景&#xff0c;字体颜色&#xff0c;大小等等&#xff0c;为什么说是临时&a…

利用Procdump+Mimikatz获取Windows帐户密码

0x01 前言&#xff1a; 前段时间拿下一个网站的shell&#xff0c;很幸运的是直接就是System权限&#xff0c;结果发现执行添加用户命令并不能成功回显 看了下系统进程&#xff0c;原来是开启了360的主动防御&#xff0c;奈何也不会做免杀&#xff0c;上传exp运行就被杀&#x…

一个逻辑清晰的购物车模型

效果图 2017-03-25 18.28.23.gifGitHub: https://github.com/lll1024/JVShopcart 说明 这是一个具备常规功能并方便改造的购物车模型 一共包含五个模块&#xff1a; JVShopcartViewController: 购物车控制器 负责协调Model和View 只有100多行代码JVShopcartFormat: 负责网络请求…

Nginx基本配置、性能优化指南

转载自&#xff1a;http://www.chinaz.com/web/2015/0424/401323.shtml 大多数的Nginx安装指南告诉你如下基础知识——通过apt-get&#xff0c;或yum安装&#xff0c;修改这里或那里的几行配置&#xff0c;好了&#xff0c;你已经有了一个Web服务器了&#xff01;而且&#xff…

关于批量修改AD域用户的脚本

最近几天帮人弄了个脚本&#xff0c;是修改域用户属性的脚本&#xff0c;今天看到徐火军写的 关于批量修改用户属性 脚本&#xff0c;觉得有必要把我的成果分享给大家。什么都不说了&#xff0c;上脚本&#xff1a; Dim oFSO, oTF, iDim sLineDim sLoginName 用户批量文件Const…

Python multiprocess 多进程模块

转发&#xff1a;http://www.langzi.fun/Python multiprocess 多进程模块.html 需要注意的是&#xff0c;如果使用多线程&#xff0c;用法一定要加上if __name____main__:(Python中的multiprocess提供了Process类&#xff0c;实现进程相关的功能。但是它基于fork机制&#xff…

PHP正则数组

<?php //正则表达式//斜杠代表定界符 /^$///$str "好厉害18653378660了hi请勿嫁得好15165339515安徽dah矮冬瓜 拍行业大概啊好广东也欺负偶怕哈";//$reg "/(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}/";//echo preg_repl…

iOS Socket Client 通讯

iOS Socket Client 通讯 阅读 239收藏 192017-03-29原文链接&#xff1a;https://github.com/guangzhouxia/JTSocketiOS Socket Client 通讯&#xff08;偏流程和代码展示&#xff09;&#xff0c;具体原理可以在网上搜索到很多&#xff0c;就不多做追叙复制了。。。 —— 由广…

api工程IOS学习:在IOS开发中使用GoogleMaps SDK

今天一直在学习api工程之类的问题,今天正好有机会和大家分享一下. 官方文档地址&#xff1a;https://developers.google.com/maps/documentation/ios/start#getting_the_google_maps_sdk_for_ios 一、申请一个收费的API KEY 要应用GoogleMaps SDK&#xff0c;必须要为你的应用申…

Python多进程与进程锁的基本使用

Python的multiprocessing模块提供了多种进程间通信的方式&#xff0c;如Queue、Pipe等。 Queue是multiprocessing提供的一个模块&#xff0c;它的数据结构就是"FIFO——first in first out"的队列&#xff0c;常用的方法有&#xff1a;put(object)入队&#xff1b;g…

[容易]比较字符串

题目来源&#xff1a;http://www.lintcode.com/zh-cn/problem/compare-strings/ 先贴上错误代码&#xff0c;测试案例没有全部通过。不一定是顺序的。 1 class Solution {2 public:3 /**4 * param A: A string includes Upper Case letters5 * param B: A string…

iOS 一行命令发布 Pod 框架

作者 ripperhe 关注 2017.03.30 23:38* 字数 5589 阅读 27评论 0喜欢 2前言 目前比较流行的组件化开发&#xff0c;针对多个 app 要用同一套代码&#xff0c;将其做成 pod 仓库是比较好的解决方案。代码只有一份放在组件仓库&#xff0c;需要集成的 app 只需要将其 pod 到工程内…

[bbk4966]第70集 第8章 -性能维护 01

本章前言: 每秒钟&#xff0c;产生的日志文件多少&#xff0c;如果产生很多的redo log 信息&#xff0c;说明负荷量大差生的原因是DML操作太多. 假如oracle database 属于dedicate server&#xff0c;使用top session方式排查数据库性能问题&#xff0c;是比较适合的.根据SESSI…

Python中正则匹配与中文的问题

笔者改写了一个爬虫&#xff0c;来爬取补天SRC的漏洞认领页面&#xff0c;将单位名称、漏洞名称、漏洞危害等级爬取下来&#xff0c;但是在正则匹配"漏洞名称"的过程中遇到了一些麻烦。 如上图&#xff0c;想要把"SQL注入漏洞"字符串正则匹配出来&#xf…

项目/程序的流程走向

领导用户需求前景准备分析(OOA)设计(OOD)实现(OOP)测试部署发布跟踪维护升级新田月会|新细胞|君宁天下|htttp://www.xintianyuehui.cn 作者&#xff1a;宁骑 联系QQ&#xff1a;1075858260转载于:https://www.cnblogs.com/ncellit/p/5491828.html

使用 UIBezierPath 进行简单的图形绘制

这篇文章介绍UIBezierPath的详细的使用, 以及一些细节! 创建一个XTBezierPath继承于UIView的类 使用drawRect 完成图形的绘制 在drawRect方法完成绘制 使用 moveToPoint, addLineToPoint两个方法绘制一个任意多边形 其中w, h 代表自定义View的宽, 高 代码如下: // 初始化一个UI…

利用python实现IP扫描

需求&#xff1a;写一个脚本&#xff0c;判断192.168.11.0/24网络里&#xff0c;当前在线ip有哪些&#xff1f; 知识点: 1 使用subprocess模块&#xff0c;来调用系统命令&#xff0c;执行ping 192.168.11.xxx 命令 2 调用系统命令执行ping命令的时候&#xff0c;会有返回值…

EFQRCode:自动生成花式二维码

原文链接&#xff1a;https://github.com/EyreFree/EFQRCodeEFQRCode&#xff1a;自动生成花式二维码。# 为开源点赞# —— 由SwiftLanguage分享EFQRCode is a tool to generate QRCode UIImage or recognize QRCode from UIImage, in Swift. It is based on CIDetector and CI…

centos删除系统自带的httpd

centos删除系统自带的httpd 1、[rootlocalhost etc]# rpm -qa|grep httpd&#xff0c;查看与httpd相关软件包。 httpd-tools-2.2.15-15.el6.centos.i686 httpd-2.2.15-15.el6.centos.i686 www.2cto.com 2、然后删除httpd&#xff1a; [rootlocalhost etc]# rpm -e httpd 出现问…