制作手机使用的网页图片查看器

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

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

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

功能点整理

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

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

然后,图片友好加载方式

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

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

制作手机网页图片查看器

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

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

<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:15px;line-height:30px;}
.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%;padding:10px;display:-webkit-box;float:left;position:relative;-webkit-box-pack:center;-webkit-box-align:center;}
.dialog figure img{max-width:100%;width:40px;max-height:100%;height:40px;}

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

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

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

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

配置参数

startSlide    : 0, //起始位置
auto          : 3000, //自动播放时间
continuous    : true, //无限循环
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;}

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

swipe.min.js下载

完整开发正式开始

我们通过列表的统一触发事件,获取触发对象的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.picture(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.picture = 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" url="‘ + url + ‘" /></li>‘; //循环绘制图片列表
    });
    html += ‘</ul></figure><footer><span id="seat" rel="‘ + rel + ‘">‘ + (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.setAttribute(‘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,
        disableScroll : true,
        callback      : function(index, element){
            var obj = $(‘#seat‘);
            var i   = index + 1;
            var rel = obj.attr(‘rel‘);
            obj.text(i + ‘/‘ + rel);

            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.attr(‘src‘, url).css({‘width‘:‘auto‘, ‘height‘:‘auto‘});
};

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

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

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

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

图片需要保存到手机相册,但网页在该情况下似乎不能完成,需要项目接口支持

swipe.js插件的bug

这几个坑后面我会一一填上

时间: 2024-10-06 04:52:41

制作手机使用的网页图片查看器的相关文章

require、backbone等重构手机图片查看器

本文是对之前的部分补充,也是对最近学习require.backbone的一次实例化的实践,希望对正在学习理解中的同学们有帮助 前文请前往:制作手机使用的网页图片查看器 新手机图片查看器 网页部分 require引入是重点,指明了主函数所在文件路径 <!doctype html> <html lang="zh-cn"> <head> <title>webapp图片查看器</title> <meta charset=&quo

JS图片查看器

<html> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>JS网页图片查看器-可控制图片放大缩小还原移动效果</title> <META HTTP-EQUIV="imagetoolbar" CONTENT="no"> <style type="t

网页中的图片查看器viewjs使用

需求分析: 对于网页中的图片进行连续放大(便于用户清晰查看内容).缩小,旋转等操作,可以使用viewjs图片查看器插件实现. viewjs官方网址:https://github.com/fengyuanchen/viewerjs 具体使用方法请参照官网说明. 下面做2个简单的示例: 1.示例一:单一图片 1 <!DOCTYPE html> 2 <html lang="zh"> 3 4 <head> 5 <meta charset="U

分享一款强大的图片查看器插件,手机PC 通吃,功能超级齐全!

一款强大的图片查看器插件,手机PC 通吃,功能超级齐全! 地址:http://photoswipe.com/

Android笔记二十七.Bitmap之简易图片查看器

转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 为了增强用户之间的交互,Android系统中提供了一些API和部件给我们开发美观有趣的应用.比如Android系统提供了ImageView来显示静态图片.AnimationDrawble来开发逐帧动画以及通过Animation对普通图片使用不减动画等.另外,Android应用中的图片不仅包括*.png.*.jpg.*.gif等格式的位图,也包括使用XML资源文件定义的各种Drawable对象.关

图片查看器(可拖拽,缩放,轮播)

一直都想写一个图片轮播,可是却一直都没有静下心来,今天终于有时间,就来做个图片查看器吧 功能:拖拽,缩放,还原,轮播,透明度 拖拽实现原理:鼠标按下onmousedown,鼠标移动onmousemove,鼠标松开onmouseup释放鼠标按下和移动的函数,一定是按下鼠标的同时进行移动,这里指的都是鼠标左键! 这里的难点就是清除默认事件,反正我是这样认为的,花了好几个小时才弄出来.写完之后发现,鼠标点一下再松开,图片就粘再指针上了,一直跟着指针跑,郁闷了好久,为什么会发生这种事,仔仔细细看了几十遍

jQuery功能强大的图片查看器插件

简要教程 viewer是一款功能强大的图片查看器jQuery插件.它可以实现ACDsee等看图软件的部分功能.它可以对图片进行移动,缩放,旋转,翻转,可以前后浏览一组图片.该图片查看器还支持移动设备,支持键盘控制,功能十分强大. 查看演示      下载插件 安装 可以通过nmp或bower来安装该图片查看器插件. npm install imageviewer bower install imageviewer 复制代码 使用方法 使用该幻灯片插件需要引入jQuery,viewer.css和v

Qt项目实战2:简单的图片查看器(1)

在博文http://www.cnblogs.com/hancq/p/5817108.html中介绍了使用空的Qt项目创建带有菜单栏.工具栏的界面. 这里,使用一个简单的图片查看器项目,来熟悉一下Qt的图片显示和基本操作. 该项目分为两部分: (1)实现图片的打开.关闭.居中显示.上一张/下一张切换 (2)实现图片的放大.缩小.左旋.右旋.另存为等操作 需要用的Qt类: QFileDialog QImage QPixmap QFileInfo 使用空的Qt项目创建带有菜单栏和工具栏的界面的操作参考

安卓开发教程-实战网页源代码查看器,安卓程序员必备

本系列教程致力于可以快速的进行学习安卓开发,按照项目式的方法,通常一篇文章会做一个小程序.提高学习的兴趣. 一方面总结自己所得,另一方面可以通过自己的分享帮助更多学习的同仁. 因为知识的连贯性,推荐按照瞬息进行学习.目录链接:http://www.chengxiaoxiao.com/bozhu/1336.html 本教程由今日头条-做全栈攻城狮原创首发,转载请注明出处. 求兼职:请联系wx:aiquanzhan 页尾提供github源代码下载地址. 一.项目描述: 众所周知,组成网站的每个页面都