移动端js图片查看器


Posted in Javascript onNovember 17, 2016

本文实例为大家分享了js图片查看器插件的使用方法,制作手机使用的网页图片查看器,供大家参考,具体内容如下

这几天抽空在为项目开发一个量身的图片查看器,目前已初步完成需求。

开发场景是:在一个多文件下载展示列表中,如检测某些文件为图片时,则点击该文件时打开图片查看器展示该图片,并将列表内其它图片同时展示查看器队列内,可供前后滑动查看及其它附带功能。

乍一听功能点似乎有点多而且有些复杂,需要梳理一下

功能点整理

首先,我们要获得点击的图片文件对象及符合条件的图片文件对象集

其次,图片查看器的制作及图片队列展示

然后,图片友好加载方式

最后,图片查看器触摸滑动及滑动后相关功能的实现

简单整理了一下,好像也不多 

制作手机网页图片查看器

根据功能点为正式开发做好准备

首先:我们为已知列表容器内图片文件添加统一标识,文件是否为图片及图片路径我们在存储时已知,直接为元素添加统一属性

<a url="..."></a>

其次:制作一个全屏灰色背景,展示图片队列,并以NO./n形式标注当前展示图片位置;所有样式全部给出,就不一一细说了(figure样式内部分属性为swipe.js必须)

.dialog,.dialog figure{position:fixed;top:0;bottom:0;left:0;right:0;z-index:1001;}
.dialog section{height:100%;background:#333;-webkit-opacity:0.7;}

.dialog footer{padding:10px;position:absolute;bottom:0;left:0;right:0;z-index:1002;font-size:13px;}
.dialog footer span{padding:0 20px;float:right;border:1px solid #999;border-radius:15px;color:#ddd;}

.dialog figure{overflow:hidden;}
.dialog figure ul{height:100%;overflow:hidden;}
.dialog figure li{width:100%;height:100%;display:-webkit-box;float:left;position:relative;-webkit-box-pack:center;-webkit-box-align:center;}
.dialog figure img{max-width:100%;max-height:100%;margin:10px;}

然后:初始化时把图片直接换成loading.gif图片,然后动态加载

<img src="loading.gif" url="..." />

最后:swipe.js轻量级触摸滑动插件学习使用,先调用

var obj = document.getElementById('swipe');
window.mySwipe = Swipe(obj, {
 ...
});

配置参数

startSlide  : 0, //起始位置
auto    : 3000, //自动播放时间
continuous  : true, //无限循环; 个人建议所有项个数不确定时赋值false, 不然为2的时候很2
disableScroll : false, //触摸时禁止滚屏
callback   : function(index, element){}, //滑动时回调函数, 参数为滑动元素排序与对象
transitionEnd : function(index, element){} //滑动完成后回调函数, 参数同上

API方法

prev(); //上一页
next(); //下一页
getPos(); //当前页索引
getNumSlides(); //所有项个数
slide(index, duration); //滑动效果

基本html结构

<figure id="swipe">
 <ul>
  <li></li>
 </ul>
</figure>

必须的css属性

figure{overflow:hidden;position:relative;}
figure ul{overflow:hidden;}
figure li{width:100%;float:left;position:relative;}

很无论体积还是文档都很轻巧,十分简单容易上手

完整开发正式开始

我们通过列表的统一触发事件,获取触发对象的url属性,如该属性存在则调用图片查看器并停止后面进入下载界面程序

$('.download a').click(function(){
 var obj = $(this);
 var url = obj.attr('url');
 if(url && url.length > 0){
  var set = $('.download a[url]');
  base_module.dialog(obj, set);
  return false;
 };

 ...
});

现在进入数据收集完毕后加工处理环节,首先展示一下我们的对象模型,对象模型的属性及方法的定义规则

var base_module = (function(){
 var base = {};
 base.options = {
  LOCK : false
 };

 base.fn = function(){
  ...
 };

 return base;
})();

编写图片查看器主函数

/**
 * 图片查看器
 * @param object obj 操作对象
 * @param object set 对象集
 */
base.dialog = function(obj, set){
 var i = set.index(obj); //当前页索引
 var rel = set.length; //所有项个数
 var html = '<section class="dialog"><section></section><figure id="swipe"><ul>'; //开始绘制图片查看器
 set.each(function(){
  var url = $(this).attr('url'); //图片路径
  html += '<li><img src="loading.gif" width="40" height="40" url="' + url + '" /></li>'; //循环绘制图片列表
 });
 html += '</ul></figure><footer><span id="po">' + (i + 1) + '/' + rel + '</span></footer></section>'; //绘制结束

 $('body').append(html); //渲染图片查看器
 //js文件加载状态
 base.loadJs('swipe.min.js', function(){
  base.swiper(i); //回调函数, swipe参数配置
 });

 var url = obj.attr('url');
 //图片加载状态
 base.loadImg(url, function(){
  base.imager(i); //回调函数, 图片展示
 });
};

按需加载swipe.js

/**
 * 按需加载js
 * @param string url 文件路径
 * @param object fn 回调函数
 */
base.loadJs = function(url, fn){
 if(typeof Swipe != 'undefined'){
  if(fn) fn();
  return false;
 };

 var js = document.createElement('script');
 js.src = url;
 document.getElementsByTagName('head')[0].appendChild(js);

 js.onload = function(){
  if(fn) fn();
 };
};

配置swipe.js参数

/**
 * 幻灯片配置
 * @param int i 当前页索引
 */
base.swiper = function(i){
 var obj = document.getElementById('swipe');
 window.mySwipe = Swipe(obj, {
  startSlide : i,
  continuous : false,
  disableScroll : true,
  callback  : function(index, element){
   var i = index + 1;
   var s = $('#swipe li').length;
   $('#po').text(i + '/' + s);

   var url = $(element).find('img').attr('url');
   base.loadImg(url, function(){
    base.imager(index);
   });
  }
 });
};

按需加载图片

/**
 * 按需加载img
 * @param string url 文件路径
 * @param object fn 回调函数
 */
base.loadImg = function(url, fn){
 var img = new Image();
 img.src = url;
 if(img.complete){
  if(fn) fn();
  return false;
 };

 img.onload = function(){
  if(fn) fn();
 };
};

图片加载完成后展示

/**
 * 展示加载完图片
 * @param int i 当前页索引
 */
base.imager = function(i){
 var obj = $('#swipe li').eq(i).find('img');
 var url = obj.attr('url');
 obj.replaceWith('<img src="' + url + '" />');
};

目前还只是初步完工,后面还需优化完善,主要有以下几点

图片查看器已绘制成功,关闭时不应该删除而是隐藏;重新调用查看器时,如图片列表没有变化则直接唤起而不必重新绘制;

图片不能放大收缩,宽高度过长情况下,预览效果会很差无法看清图片;

没有缩略图,开发时才发现我们存储图片时居然没有压缩处理图形,加载图片时流量太坑,当然这个问题本身首先要在后台存储时处理。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
Mar 08 Javascript
IE6-IE9不支持table.innerHTML的解决方法分享
Sep 14 Javascript
jQuery随机密码生成的方法
Mar 09 Javascript
javascript实现控制文字大中小显示
Apr 28 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
Nov 16 Javascript
jquery仿京东商品放大浏览页面
Jun 06 jQuery
javaScript中的空值和假值
Dec 18 Javascript
微信小程序scroll-x失效的完美解决方法
Jul 18 Javascript
快速解决angularJS中用post方法时后台拿不到值的问题
Aug 14 Javascript
微信小程序实现同一页面取值的方法分析
Apr 30 Javascript
解决一个微信号同时支持多个环境网页授权问题
Aug 07 Javascript
Vue2项目中对百度地图的封装使用详解
Jun 16 Vue.js
javascript另类方法实现htmlencode()与htmldecode()函数实例分析
Nov 17 #Javascript
JavaScript实现解析INI文件内容的方法
Nov 17 #Javascript
详解AngularJS中的表单验证(推荐)
Nov 17 #Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
Nov 17 #Javascript
用Vue.js实现监听属性的变化
Nov 17 #Javascript
JS实现类似51job上的地区选择效果示例
Nov 17 #Javascript
JS实现的适合做faq或menu滑动效果示例
Nov 17 #Javascript
You might like
php中filter_input函数用法分析
2014/11/15 PHP
PHP Header失效的原因分析及解决方法
2016/11/16 PHP
PHP实现负载均衡下的session共用功能
2018/04/17 PHP
yii2 在控制器中验证请求参数的使用方法
2019/06/19 PHP
JQuery对id中含有特殊字符的转义处理示例
2013/09/06 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
Node.js如何自动审核团队的代码
2016/07/20 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
2016/12/28 Javascript
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
基于JavaScript实现前端数据多条件筛选功能
2020/08/19 Javascript
判断div滑动到底部的scroll实例代码
2017/11/15 Javascript
javascript填充默认头像方法
2018/02/22 Javascript
Vue的watch和computed方法的使用及区别介绍
2018/09/06 Javascript
js使用Promise实现简单的Ajax缓存
2018/11/14 Javascript
vue拖拽排序插件vuedraggable使用方法详解
2020/08/21 Javascript
详解小程序云开发攻略(解决最棘手的问题)
2019/09/30 Javascript
javascript实现简单留言板案例
2021/02/09 Javascript
[03:19]2016国际邀请赛中国区预选赛第四日TOP10镜头集锦
2016/07/01 DOTA
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
Python脚本暴力破解栅栏密码
2015/10/19 Python
python对象及面向对象技术详解
2016/07/19 Python
python多进程实现文件下载传输功能
2018/07/28 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
Python二元赋值实用技巧解析
2019/10/25 Python
python-OpenCV 实现将数组转换成灰度图和彩图
2020/01/09 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
2020/02/26 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
python多线程semaphore实现线程数控制的示例
2020/08/10 Python
python matplotlib绘制三维图的示例
2020/09/24 Python
如何完美的建立一个python项目
2020/10/09 Python
纯CSS3实现8组超炫酷鼠标滑过图片动画
2016/03/16 HTML / CSS
Watchshop德国:欧洲在线手表No.1
2019/06/20 全球购物
2015年大学学生会工作总结
2015/05/13 职场文书
2019年中,最受大众欢迎的6本新书
2019/08/07 职场文书
Java并发编程之详解CyclicBarrier线程同步
2021/06/23 Java/Android