jquery exif + lazyload实现延迟加载并显示相片exif信息

对一个摄影爱好者来说,从高手的作品中学习是非常有用的。而照片的光圈,快门,感光度等信息是关注的重点。

上代码:

 1 <script src="../js/jquery.js" type="text/javascript"></script>
 2 <script src="../js/jquery.exif.js" type="text/javascript"></script>
 3 <script src="../js/jquery.lazyload.js" type="text/javascript"></script>
 4 <script type="text/javascript">
 5     $(document).ready(
 6         function()
 7         {
 8             count = 19 ; 
 9             var defaultVision = "建筑"
10             for( i=1;i<count;++i )
11             {
12                 var pin = $('<div></div>',{'class':'pin'}) ;
13                 var img_src = 'photos/'+defaultVision+'/'+i+'.jpg' ;
14                 
15                 
16                 var img = $('<img />',{'src':'../images/loading.gif','data-original': img_src,'class':'lazy img'});
17                 pin.append(img);
18                 var img_info ="<div class='img_info'><img src='../images/loading.gif' /></div>" ;
19                 pin.append(img_info);
20                 $('#columns').append(pin);
21             }
22             
23             mylazy();
24         }
25     );
26     
27     var mylazy = function()
28     {
29         $("img.lazy").lazyload({
30                 effect : "fadeIn",
31                 load : function()
32                 {
33                     setPhoto_info(this);
34                 },
35         });    
36     }
37     function setPhoto_info(ele)
38     {
39         //获取图片的Exif信息
40         var info = "" ;
41         var model = "" ; 
42         var fnumber = "" ;
43         var time = "" ;
44         var iso = "" ; 
45         var $this = $(ele).exifLoad(function()
46         {
47             //这里还可以获取更多的参数,参见exif的信息格式 
48             model = $this.exif("Model");
49             fnumber = $this.exif("FNumber");
50             time = $this.exif("ExposureTime");
51             iso = $this.exif("ISOSpeedRatings");
52             
53             if( time<1 ) time = "1/" + Math. round(1/time) ;
54             else time += "s" ;
55             
56             var img_info = "<span>型号:<em class='model'>"+model+"</em></span>"+
57             "<span>光圈:<em class='fNumber'>"+fnumber+"</em></span>"+
58             "<br /><span>快门:<em class='ex_time'>"+time+"</em></span>"+
59             "<span>ISO:<em class='iso'>"+iso+"</em></span>";
60             $(ele).parent().find(".img_info").html(img_info);
61         });
62     }
63 </script>

之前遇到的问题是:
1,在jquery exif官网上的使用方式与这里不同;参考了网上的一些做法:http://developer.51cto.com/art/201207/346157.htm
2,需要在lazyload的load函数中定义回调函数,以使图片在加载完成后再读取exif信息

下面是用css3 columns实现的一个简单的Pinterest的例子,完整的代码如下:

  1 <!DOCTYPE HTML>
  2 <html lang="en">
  3 <head>
  4 <meta charset="utf-8" />
  5 <title>Pinterest</title>
  6 </head>
  7 <style type="text/css">
  8 * {
  9     margin:0;
 10     padding:0;
 11 }
 12 body {
 13     background:url(../images/beige_paper.png);
 14     font-family:"Microsoft Yahei";
 15     font-size:0.8em;
 16     color:#999;
 17 }
 18 
 19 #container {
 20     width:100%;
 21     height:100%;
 22 }
 23 /*这里准备加上不同的相册*/
 24 footer
 25 {
 26     
 27 }
 28 #columns
 29 {
 30     -webkit-column-count: 3;
 31     -webkit-column-gap: 10px;
 32     -webkit-column-fill: auto;
 33 }
 34 .pin
 35 {
 36     display: inline-block;
 37     background: #FEFEFE;
 38     border: 2px solid #FAFAFA;
 39     box-shadow: 0 1px 2px rgba(34, 25, 25, 0.4);
 40     margin: 0 2px 15px;
 41     -webkit-column-break-inside: avoid;
 42     -moz-column-break-inside: avoid;
 43     column-break-inside: avoid;
 44     padding: 5px;
 45     background: -webkit-linear-gradient(45deg, #FFF, #F9F9F9);
 46     opacity: 1;
 47     position:relative;
 48     -webkit-transition: all .2s ease;
 49 }
 50 .pin img.img {
 51     width: 100%;
 52 }
 53 .pin .img_info
 54 {
 55     padding:5px 0;
 56 }
 57 .pin .img_info em
 58 {
 59     color:#000;
 60 }
 61 .pin .img_info span
 62 {
 63     margin:0 3px;
 64 }
 65 @media (min-width: 960px) {
 66     #columns {
 67         -webkit-column-count: 4;
 68         -moz-column-count: 4;
 69         column-count: 4;
 70     }
 71 }
 72 
 73 @media (min-width: 1100px) {
 74     #columns {
 75         -webkit-column-count: 5;
 76         -moz-column-count: 5;
 77         column-count: 5;
 78     }
 79 }
 80 #columns:hover .pin:not(:hover) {
 81     opacity: 0.4;
 82 }
 83 
 84 </style>
 85 <script src="../js/jquery.js" type="text/javascript"></script>
 86 <script src="../js/jquery.exif.js" type="text/javascript"></script>
 87 <script src="../js/jquery.lazyload.js" type="text/javascript"></script>
 88 <script type="text/javascript">
 89     $(document).ready(
 90         function()
 91         {
 92             count = 19 ; 
 93             var defaultVision = "建筑"
 94             for( i=1;i<count;++i )
 95             {
 96                 var pin = $('<div></div>',{'class':'pin'}) ;
 97                 var img_src = 'photos/'+defaultVision+'/'+i+'.jpg' ;
 98                 
 99                 
100                 var img = $('<img />',{'src':'../images/loading.gif','data-original': img_src,'class':'lazy img'});
101                 pin.append(img);
102                 var img_info ="<div class='img_info'><img src='../images/loading.gif' /></div>" ;
103                 pin.append(img_info);
104                 $('#columns').append(pin);
105             }
106             
107             mylazy();
108         }
109     );
110     
111     var mylazy = function()
112     {
113         $("img.lazy").lazyload({
114                 effect : "fadeIn",
115                 load : function()
116                 {
117                     setPhoto_info(this);
118                 },
119         });    
120     }
121     function setPhoto_info(ele)
122     {
123         //获取图片的Exif信息
124         var info = "" ;
125         var model = "" ; 
126         var fnumber = "" ;
127         var time = "" ;
128         var iso = "" ; 
129         var $this = $(ele).exifLoad(function()
130         {
131             //这里还可以获取更多的参数,参见exif的信息格式 
132             model = $this.exif("Model");
133             fnumber = $this.exif("FNumber");
134             time = $this.exif("ExposureTime");
135             iso = $this.exif("ISOSpeedRatings");
136             
137             if( time<1 ) time = "1/" + Math. round(1/time) ;
138             else time += "s" ;
139             
140             var img_info = "<span>型号:<em class='model'>"+model+"</em></span>"+
141             "<span>光圈:<em class='fNumber'>"+fnumber+"</em></span>"+
142             "<br /><span>快门:<em class='ex_time'>"+time+"</em></span>"+
143             "<span>ISO:<em class='iso'>"+iso+"</em></span>";
144             $(ele).parent().find(".img_info").html(img_info);
145         });
146     }
147 </script>
148 <body>
149 <div id="container">
150   <div id="columns">
151     
152   </div>
153 </div>
154 <footer></footer>
155 </body>
156 </html>

 

转载于:https://www.cnblogs.com/trying/archive/2013/03/21/2972584.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376794.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

undefined reference to `pthread_create‘(linux下Clion使用thread报错)

完整报错&#xff1a; [ Build | AsyncLogger | Debug ] /snap/clion/169/bin/cmake/linux/bin/cmake --build /home/dyy/CLionProjects/AsyncLogger/cmake-build-debug --target AsyncLogger -- -j 6 [ 50%] Linking CXX executable AsyncLogger /usr/bin/ld: CMakeFiles/Asy…

UVALive 6257 Chemist's vows --一道题的三种解法(模拟,DFS,DP)

题意&#xff1a;给一个元素周期表的元素符号&#xff08;114种&#xff09;&#xff0c;再给一个串&#xff0c;问这个串能否有这些元素符号组成&#xff08;全为小写&#xff09;。 解法1&#xff1a;动态规划 定义&#xff1a;dp[i]表示到 i 这个字符为止&#xff0c;能否有…

.NET开发相关使用工具和框架【转载】

开发类 visual_studio 2005-2012系列----------语言开发工具 Visio 2003 / Power Desiger -----------建模工具 Dreamweaver_CS5 --------------网页设计 ExpressionStudio 4 / blend 4 -------------wpf/silverlight设计工具 开发辅助类 SVN 主程序 ---------------文件控制 I…

JAVA数组的定义及用法

数组是有序数据的集合&#xff0c;数组中的每一个元素具有同样的数组名和下标来唯一地确定数组中的元素。 1. 一维数组 1.1 一维数组的定义 type arrayName[]; type[] arrayName; 当中类型(type)能够为Java中随意的数据类型&#xff0c;包含简单类型组合类型&#xff0c;数组名…

php操作httpsqs

php初始化httpsqs: include_once("httpsqs_client.php");$httpsqs new httpsqs("127.0.0.1", 1218, "mypass123", "utf-8"); php操作httpsqs:常用命令 操作入队&#xff1a; $result $httpsqs->put(xiongwei2, test1); 获取队列中…

异步日志系统设计demo

目录简单版本1优化版本1优化版本2对于QPS要求很高或者对性能有一定要求的服务器程序&#xff0c;同步写日志会对服务的关键性逻辑的快速执行和及时响应带来一定的性能损失&#xff0c;因为写日志时等待磁盘IO完成工作也需要一定时间。为了减少这种损失&#xff0c;一般采用异步…

js unix时间戳转换

一、unix时间戳转普通时间&#xff1a; var unixtime1358932051; var unixTimestamp new Date(unixtime* 1000); commonTime unixTimestamp.toLocaleString(); alert("普通时间为&#xff1a;"commonTime); 二、普通时间转unix时间戳 var str "2013-01-01 00…

hdu 1025(最长非递减子序列的n*log(n)求法)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1025 经典题。。。最长非递减序列的n*log(n)求法。。。orz... View Code 1 #include<iostream>2 const int N500007;3 using namespace std;4 int city[N];5 int dp[N];//dp[i]保存的是长度为i的最长不降…

消息队列重要机制讲解以及MQ设计思路(kafka、rabbitmq、rocketmq)

目录《Kafka篇》简述kafka的架构设计原理&#xff08;入口点&#xff09;消息队列有哪些作用&#xff08;简单&#xff09;消息队列的优缺点&#xff0c;使用场景&#xff08;基础&#xff09;消息队列如何保证消息可靠传输死信队列是什么&#xff1f;延时队列是什么&#xff1…

js判断手机浏览器

最新浏览器识别合并。 demo&#xff1a;http://v.qq.com -> http://v.qq.com/h5    http://v.qq.com/ -> http://v.qq.com/h5    http://v.qq.com/h5 -> http://v.qq.com/h5 <script type"text/javascript"> (function(W){ …

数据库归档模式

1、在sys身份下登陆oracle&#xff0c;执行命令archive log list; SQL> archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence …

转载|网络编程中阻塞式函数的底层逻辑

逛知乎看到的&#xff0c;觉得写的挺透彻的&#xff0c;转载一下&#xff0c;原文链接&#xff1a;Unix网络编程里的阻塞是在操作系统的内核态创建一个线程来死循环吗&#xff1f; 原文以阻塞式的recv函数作为讲解&#xff0c;但是所有阻塞式的api底层逻辑基本相通。 下面是正文…

把txt文件中的json字符串写到plist文件中

- (void)json2Plist {NSString *filePath [self applicationDocumentsDirectoryFileName:"json"];NSMutableArray *tempArray [[NSMutableArray alloc] initWithContentsOfFile:filePath];//第一次添加数据时,数组为空if (tempArray.count 0) {tempArray [NSMuta…

树的存储结构2 - 数据结构和算法42

树的存储结构 让编程改变世界 Change the world by program 孩子表示法 我们这次换个角度来考虑&#xff0c;由于树中每个结点可能有多棵子树&#xff0c;可以考虑用多重链表来实现。 就像我们虽然有计划生育&#xff0c;但我们还是无法确保每个家庭只养育一个孩子的冲动&a…

海量数据去重

海量数据去重 一个文件中有40亿条数据&#xff0c;每条数据是一个32位的数字串&#xff0c;设计算法对其去重&#xff0c;相同的数字串仅保留一个&#xff0c;内存限制1G. 方法一&#xff1a;排序 对所有数字串进行排序&#xff0c;重复的数据传必然相邻&#xff0c;保留第一…

Sharepoint 2013 发布功能(Publishing features)

一、默认情况下&#xff0c;在创建网站集时&#xff0c;只有选择的模板为‘ Publishing Portal&#xff08;发布门户&#xff09;’与‘ Enterprise Wiki&#xff08;企业 Wiki&#xff09;’时才默认启用发布功能&#xff0c;如下图所示&#xff1a; 二、发布功能包含两块&…

【原】android启动时白屏或者黑屏的问题

解决应用启动时白屏或者黑屏的问题 由于Activity只能到onResume时&#xff0c;才能展示到前台&#xff0c;所以&#xff0c;如果为MAIN activity设置背景的话&#xff0c;无论onCreate-onResume速度多快&#xff0c;都会出现短暂的白屏或者黑屏 其实解决的办法很简单&#xff0…

【草稿】windows + vscode 远程开发

主要分为三个步骤&#xff1a; 1、开启openssh服务 2、通过ssh命令连接到远程服务器 3、通过vscode连接远程服务器进行开发调试 ssh概念 SSH是较可靠&#xff0c;专为远程登陆会话和其他网络服务提供安全性得协议&#xff0c;利用ssh协议可以有效防止远程管理过程中得信息…

POJ3185(简单BFS,主要做测试使用)

没事做水了一道POJ的简单BFS的题目 这道题的数据范围是20,所以状态总数就是&#xff08;1<<20&#xff09; 第一次提交使用STL的queue&#xff0c;并且是在队首判断是否达到终点&#xff0c;达到终点就退出&#xff0c;超时&#xff1a;&#xff08;其实这里我是很不明白…

tomcat站点配置

tomcat版本&#xff1a;tomcat5.5.91、打开tomcat\conf\server.xml&#xff0c;在里面找到<Engine name"Catalina" defaultHost"localhost">.....</Engine>2、在<Engine name"Catalina" defaultHost"localhost"><…