jQuery实现简单的图片查看器


Posted in Javascript onSeptember 11, 2020

项目中自己diy了一个图片查看器。因为初始代码不是自己的,只是在上面改了一下也没有弄的很漂亮。等以后有时间了在重写一下样式和封装,作为备用的只是积累吧。如果有童鞋有用到,完全可以在此基础上改,比较容易,代码也比较简单

图片查看器主要有几个功能:

 1.显示图片和图片信息(图片名称、发布者等等)

2.切换图片

3.关闭图片查看器

初始化接口函数pictureViewer.init: function(picInfos,tapNumber,isBig)

picInfos: 传入图片组信息,必须,格式如下
 var picInfos = [
 {
  "url" : "default.png",
  "data": [
  {
  "key":"名称:",
  "value":"测试图片"
  },
  {
  "key":"发布者:",
  "value":"chua"
  }
  ]
 },
 {
  "url" : "test.jpeg",
  "data": [
  {
  "key":"名称",
  "value":"测试图片"
  },
  {
  "key":"发布者:",
  "value":"发大水发大水发顺风h"
  },
  {
  "key":"这个图片的其他信息",
  "value":"vsfsgsdgfds234323424"
  }
  ]
 },
 ...
 ] //传入参数的样式

tapNumber: 要显示的图片在图片列表中的索引,必须,从0开始
isBig:是否使用大图查看,默认是false,可选
html及css源码如下(后面有一个例子)

<!DOCTYPE html>
<html lang="ch-cn">
 <head>
<meta charset="utf-8">

<script type="text/javascript" src='jquery-1.9.1.js'></script>
 <link rel="stylesheet" type="text/css" href="imgTap.css">
 <script type="text/javascript" src='imgTap.js'></script>
 <style type="text/css">
 html,body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, button, textarea, p, blockquote, th, td{
 margin: 0;
 padding:0;
 }
 *{
 -webkit-box-sizing: border-box;
 -moz-box-sizing: border-box;
 box-sizing: border-box;
 }

 body{
 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
 }
 .imgTapDetail {
 display: none;
 position: absolute;
 z-index: 2000;
 top: 0;
 width: 100%;
 height: 100%;
 background: none transparent scroll repeat 0% 0%;
 color: #000 !important;
 }
 .page-secShadow {
 position: absolute;
 top: 0;
 left: 0;
 width: 100%;
 height: 100%;
 background: #000;
 background-color: rgba(0,0,0,.3);
 filter: alpha(opacity=50);
 }

 .page-shadowContent {
 width: 40%;
 margin: 0 auto;
 margin-top: 20%;
 position: relative !important;
 min-width: 400px;
 }
 .page-shadowContent.widget-big{

 }
 .leftTap, .rightTap {
 margin-top: 50%;
 width: 80px;
 height: 80px;
 border-radius: 50%;
 position: absolute;
 top: -80px;
 cursor: pointer;
 }
 .leftTap {
 left: -30%;
 background: url("imgTap.png") 0 0 no-repeat;
 }
 .rightTap {
 right: -30%;
 background: url("imgTap.png") -80px 0 no-repeat;
 }
 .closeTap {
 width: 60px;
 height: 60px;
 border-radius: 50%;
 position: absolute;
 right: -30px;
 top: -30px;
 cursor: pointer;
 background: url("imgTap.png") 0 -165px no-repeat;
 z-index: 99;
 }
 .widget {
 padding: 0 5px;
 -webkit-box-shadow: none;
 -moz-box-shadow: none;
 box-shadow: none;
 margin: 3px 0 10px 0;
 }
 .widget-body {
 background-color: #fff;
 -webkit-box-shadow: 1px 0 10px 1px rgba(0,0,0,.3);
 -moz-box-shadow: 1px 0 10px 1px rgba(0,0,0,.3);
 box-shadow: 1px 0 10px 1px rgba(0,0,0,.3);
 padding: 12px;
 }
 .page-shadowContent .widget-body {
 min-height: 200px;
 padding: 15px!important;
 border: 1px solid #ccc;
 overflow: hidden;
 }
 .widget-body .row {
 margin-right: -10px !important;
 margin-left: -10px !important;
 }
 .imgShow {
 text-align: center;
 height: 400px;
 padding-left: 10px;
 padding-right: 10px;
 /*background: url(default.png) center no-repeat;*/
 }
 #tapContent{
 padding-left: 10px;
 padding-right: 10px;
 }
 .imgContent {
 max-width: 400px;
 max-height: 400px;
 vertical-align: middle;
 }
 .widget-body img {
 max-width: 100%;
 height: auto!important;
 }
 .imgShow > span {
 height: 100%;
 display: inline-block;
 vertical-align: middle;
 } 
 .imgTapDetail .form-group {
 overflow: hidden;
 margin-bottom: 0 !important;
 position: relative;
 min-height: 34px;
 }
 .widget-detail .form-group .detail-LabelStyle {
 float: left;
 padding-left: 5px;
 /* max-width: 50%; */
 text-align: left;
 line-height: 34px!important;
 color: rgb(115, 115, 115);
 padding-right: 5px;
 height: 34px;
 overflow: hidden;
 left: 0;
 top: 0;
 }
 .widget-detail .form-group .detail-SpanStyle {
 padding: 8px 0 6px 5px;
 line-height: 20px;
 width: auto;
 height: auto!important;
 min-height: 34px;
 float: left;
 /* margin-left: 80px; */
 word-break: break-all;
 }
 .widget-big {
 width: 80%;
 min-width: 300px;
 }
 .widget-big .leftTap{
 left: -10%;
 }
 .widget-big .rightTap{
 right: -10%;
 }
 .widget-big .widget-detail{
 padding: 40px 0;
 }
 .widget-big .imgShow{
 min-height: 500px;
 }
 .widget-big .imgShow img{
 max-width: 800px; 
 max-height: 550px;
 }
 </style>
 </head>
 <body >
 <div class="imgTapDetail"></div>
 <script type="text/javascript">
 var picInfos = [
 {
 "url" : "default.png",
 "data": [
  {
  "key":"名称:",
  "value":"测试图片"
  },
  {
  "key":"发布者:",
  "value":"chua"
  }
 ]
 },
 {
 "url" : "test.jpeg",
 "data": [
  {
  "key":"名称",
  "value":"测试图片"
  },
  {
  "key":"发布者:",
  "value":"发大水发大水发顺风h"
  },
  {
  "key":"这个图片的其他信息",
  "value":"vsfsgsdgfds234323424"
  }
 ]
 }
 ] 
 pictureViewer.init(picInfos,0,true);
 </script> 
</html>

js的源码如下

pictureViewer = {
 picInfos: [],
 curPicIndex: 0,
 isBig:false,//大图查看?默认为false。默认图片显示区域为window宽度的40%,大图为80%
 imgTapSelector:".imgTapDetail",
 init: function(picInfos,tapNumber,isBig){
 var _this = this;

 _this.picInfos = picInfos;
 _this.curPicIndex = tapNumber;
 _this.isBig = isBig;
 tapImgInit();
 
 //图片查看器初始化
 function tapImgInit(){
  //页面代码和事件只需要初始化一次即可
  if(!_this.guid){
  _this.guid = 1;
  initTapImgHtml();
  $(document).on("click","#rightTap",function(){
   _this.curPicIndex++;
   if(_this.curPicIndex == _this.picInfos.length){
   _this.curPicIndex = 0;
   }
   $("#tapContent").html("")
   tapImg()
  }).on("click","#leftTap",function(){
   _this.curPicIndex--;
   if(_this.curPicIndex < 0){
   _this.curPicIndex = _this.picInfos.length-1;
   }
   $("#tapContent").html("")
   tapImg();
  }).on("click","#closeTap",function(){
   $(_this.imgTapSelector).hide("fast")
  })
  }
  var offTop = top.document.body.scrollTop || top.document.documentElement.scrollTop;
  $('#imgTapPanel').css("margin-top",_this.isBig?(offTop>30?offTop:30):offTop + 100)
  tapImg();
  $(_this.imgTapSelector).show("fast");
 }
 //初始化图片查看器的html代码
 function initTapImgHtml(){
  var $detailText = '<div class="page-secShadow" >'
  + '<div id="imgTapPanel" class="page-shadowContent '+(_this.isBig?"widget-big":"")+'">'
  + '<div id="leftTap" class="leftTap"></div>'
  + '<div id="rightTap" class="rightTap"></div>'
  + '<div id="closeTap" class="closeTap"></div>'
  + '<div class="widget row"><div class="widget-body">'
  + '<div class="widget-detail row">'
  + '<div class="imgShow">'
  + '<img src="logo.png" id="tapImg" class="imgContent"><span></span>'
  + '</div>'
  + '<div id="tapContent"></div>'
  + '</div></div></div></div></div>'; 
  
  $(_this.imgTapSelector).html($detailText);
  hoverButton("#leftTap", 0, 0, 0, "-80px");
  hoverButton("#rightTap", "-80px", 0, "-80px", "-80px");
  hoverButton("#closeTap", 0, "-165px", "-60px", "-165px");
 }
 //添加左右切换图标、关闭图标的hover响应事件。这个其实可以起到css中更好一些
 function hoverButton(id, x, y, A, B){
  $(id).hover(function(){
  $(this).css('background-position', A + ' '+ B)
  },function(){
  $(this).css('background-position', x + ' '+ y)
  })
 }
 //刷新当前图片及图片信息
 function tapImg(){
  var reg = /[::]$/,
  leftTap = $("#leftTap"),
  rightTap = $("#rightTap"),
  imgTap = $("#tapImg"),
  contentTap = $("#tapContent");

  leftTap.css("display","block");
  rightTap.css("display","block");
  if(_this.picInfos.length == 1){
  leftTap.css("display","none");
  rightTap.css("display","none");
  }
  imgTap.attr("src",_this.picInfos[_this.curPicIndex].url);

  var data = _this.picInfos[_this.curPicIndex].data,
  dataLength = data.length,
  $text = "";

  for(var i=0; i<dataLength; i++){
  $text += '<div class="form-group">'
   + '<label class="detail-LabelStyle">'+data[i].key.replace(reg,"")+':</label>'
   + '<span id="spanLoginName" class="detail-SpanStyle">'+data[i].value+'</span>'
   + '</div>';
  };
  contentTap.empty().append($text);

  setTimeout(function(){
  if(_this.isBig && imgTap.height() > 400){
   imgTap.parent().attr("style","height:inherit");
  }else{
   imgTap.parent().removeAttr("style");
  }
  },1);
 }
 }
}

希望本文所述对大家学习javascript程序设计有所帮助。

Javascript 相关文章推荐
js实现权限树的更新权限时的全选全消功能
Feb 17 Javascript
jWiard 基于JQuery的强大的向导控件介绍
Oct 28 Javascript
javascript实现表单提交后,提交按钮不可用的方法
Apr 18 Javascript
JS实现的仿东京商城菜单、仿Win右键菜单及仿淘宝TAB特效合集
Sep 28 Javascript
JSON与XML的区别对比及案例应用
Nov 11 Javascript
微信小程序实战之轮播图(3)
Apr 17 Javascript
Angularjs中使用轮播图指令swiper
May 30 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
Mar 28 Javascript
使用vue-aplayer插件时出现的问题的解决
Mar 02 Javascript
详解JavaScript函数callee、call、apply的区别
Mar 08 Javascript
Map与WeakMap类型在JavaScript中的使用详解
Nov 18 Javascript
html5中sharedWorker实现多页面通信的示例代码
May 07 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
Dec 30 #Javascript
基于jQuery实现美观且实用的倒计时实例代码
Dec 30 #Javascript
基于JavaScript实现手机短信按钮倒计时(超简单)
Dec 30 #Javascript
Highcharts使用简例及异步动态读取数据
Dec 30 #Javascript
JavaScript阻止回车提交表单的方法
Dec 30 #Javascript
基于JavaScript代码实现微信扫一扫下载APP
Dec 30 #Javascript
分享两款带遮罩的jQuery弹出框
Dec 30 #Javascript
You might like
关于UEditor编辑器远程图片上传失败的解决办法
2012/08/31 PHP
php简单生成随机数的方法
2015/07/30 PHP
大家须知简单的php性能优化注意点
2016/01/04 PHP
PHP数学运算与数据处理实例分析
2016/04/01 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
两个Javascript小tip资料
2010/11/23 Javascript
JavaScript高级程序设计 阅读笔记(十七) js事件
2012/08/14 Javascript
js 自定义个性下拉选择框示例
2013/08/20 Javascript
JS 如何获取radio选中后的值及不选择取radio的值
2013/10/28 Javascript
js中通过父级进行查找定位元素
2014/06/15 Javascript
node.js中的emitter.on方法使用说明
2014/12/10 Javascript
自己编写的支持Ajax验证的JS表单验证插件
2015/05/15 Javascript
JavaScript实现时间倒计时跳转(推荐)
2016/06/28 Javascript
Vue.js项目模板搭建图文教程
2017/09/20 Javascript
nodejs检测因特网是否断开的解决方案
2019/04/17 NodeJs
tsconfig.json配置详解
2019/05/17 Javascript
微信小程序保持session会话的方法
2020/03/20 Javascript
Python中基本的日期时间处理的学习教程
2015/10/16 Python
详解python进行mp3格式判断
2016/12/23 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
2019/06/18 Python
详解10个可以快速用Python进行数据分析的小技巧
2019/06/24 Python
python利用opencv实现SIFT特征提取与匹配
2020/03/05 Python
python数据处理——对pandas进行数据变频或插值实例
2020/04/22 Python
Django 用户认证Auth组件的使用
2020/11/30 Python
python基于openpyxl生成excel文件
2020/12/23 Python
举例讲解Python装饰器
2020/12/24 Python
python 下载文件的几种方法汇总
2021/01/06 Python
加拿大知名的国际儿童品牌:Hatley
2016/11/09 全球购物
全球领先的全景影像品牌:Insta360
2019/08/21 全球购物
英国DIY汽车维修配件网站:DIY Car Service Parts
2019/08/30 全球购物
2015年元旦活动总结
2014/05/09 职场文书
十佳青年事迹材料
2014/08/21 职场文书
2014年国庆节庆祝建国65周年比赛演讲稿
2014/09/21 职场文书
北京故宫导游词
2015/01/31 职场文书
社区环境卫生倡议书
2015/04/29 职场文书
《自然之道》读后感3篇
2019/12/17 职场文书