1.1.1 摘要

现在,许多网站都提供在线图片和图书阅读的功能,这种方式比下载后阅读来的直观和人性化,要实现该功能涉及到点击处理和图片动态加载。

在接下来的博文中,我们将通过Javascript方式实现在线阅读这一功能。

1.1.2 正文

Index页面

首先,我们创建index.html页面,它包含三个div元素分别是content、controls和doccontainer,其中controls用来显示翻页控件(前/后翻),而doccontainer用于显示图片,具体定义如下:

<!doctype html>
<html lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>Online Document Viewer Demo</title>
<meta name="author" content="JK_Rush">
<link rel="stylesheet" type="text/css" media="all" href="css/style.css">
<script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="js/jquery.onlinedocview.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$("#controls").viewer();
});
</script>
</head>
<body>
<div>
<div id="Div1">
<h1>Online Document Viewer Demo</h1>
<div id="controls">
<div id="backpage" class="ios-arrow-left">Back</div>
<div id="forwardpage" class="ios-arrow-right">Forward</div>
</div>
<div id="doccontainer">
<img src="img/1.jpg" data-page="1" title="click for next page"></div>
</div><!-- END #content -->
</div><!-- END # -->
</body>

 

图1 index页面

上面,我们定义了index.html页面,引用了jQuery库文件,在controls元素中包含backpage和forwardpage控件元素,它用于表示前或后翻页的操作;而doccontainer中img的元素用于显示文档,每当用户点击前或后翻页就会加载相应的内容到img元素中。

Javascript

接下来,我们需要实现在线文档的翻页功能和内容的动态加载,我们定义jQuery插件方法viewer(),当用户点击#backpage和#forwardpage控件元素时实现向前或后翻页并且动态地加载相应的文档,具体定义如下:

/*****
* The viewer function, when user click #forwardpage, #backpage or image directly,
* load the corrosponding image.
******/
$.fn.viewer = function(options) {
'use strict'; var opts = $.extend(true, {}, $.fn.viewer.defaults, options); var $docImage = $('#doccontainer > img'); // Implements the image click function.
$docImage.on('click', function(e) {
e.preventDefault();
var currentId = $(this).attr('data-page'),
// Gets next page id.
nextImgId = parseInt(currentId) + 1,
nextImgSrc = opts.imgDirectory; if (currentId == opts.lastDocNum) {
// If the last page, then do nothing
return false;
} nextImgSrc += getFile(nextImgId);
$(this).attr('data-page', nextImgId);
$(this).attr('src', nextImgSrc);
}) // Implements #forwardpage and #backpage control click function.
$('#controls > #forwardpage, #controls > #backpage').on('click', function(e) {
e.preventDefault(); var currentId = $docImage.attr('data-page'),
nextImgSrc = opts.imgDirectory; if ($(this).attr('id') == 'backpage') {
var nextImgId = parseInt(currentId) - 1;
} else if ($(this).attr('id') == 'forwardpage') {
var nextImgId = parseInt(currentId) + 1;
} if ((currentId == opts.lastDocNum && $(this).attr('id') == 'forwardPage') ||
(currentId == 1 && $(this).attr('id') == 'backpage')) {
// If the last page or the first page, then do nothing.
return false;
} // Loads corresponding image file.
nextImgSrc += getFile(nextImgId);
$docImage.attr('data-page', nextImgId);
$docImage.attr('src', nextImgSrc); }) // Constructs the image file name.
function getFile(n) {
return n + '.' + opts.fileType;
} };

上面,我们定义了jQuery方法viewer(),我们实现了#forwardpage、#backpage和#doccontainer的点击事件处理方法,当用户点击#forwardpage、#backpage或#doccontainer动态地加载相应的文档,我们通过修改img元素的src属性来动态加载文档,并且通过data-page属性保存当前文档的页码。

CSS样式

最后,我们给#forwardpage和#backpage控件元素添加CSS样式,具体化定义如下:

/*Back and Forward button style*/
.ios-arrow-left {
cursor:pointer;
display : block;
position:absolute;
z-index : 0;
left:50px;
top:50px;
height:30px;
width:auto;
padding: 0 10px 0 6px;
background-repeat:repeat-x;
background-size : 100% 30px;
background-position :0;
background-image : -webkit-linear-gradient(
bottom,
rgba(0,0,0,0) 0%,
rgba(0,0,0,0) 50%,
rgba(255,255,255,0.1) 50%,
rgba(255,255,255,0.3) 100%
);
border-radius: 5px;
border-bottom: 1px solid rgba(255,255,255,0.4);
box-shadow :0 -1px 1px rgba(0,0,0,0.2)inset,
0 1px 2px rgba(0,0,0,0.8)inset;
font-family : HelveticaNeue;
font-weight: 400;
font-size : 12px;
line-height : 30px;
text-align:center;
color:#fff;
text-shadow : 0px -1px 0px rgba(0,0,0,0.8);
}
.ios-arrow-left:before{
position:absolute;
content : ' ';
left:-8px;
top:3.5px;
height : 24px;
width: 24px;
z-index : 1;
background-repeat:repeat-x;
background-size : 20px 20px;
background-position :-1px -0.5px;
background-image :
-webkit-gradient(linear, left bottom, right top,
from(rgba(0,0,0,0)),
color-stop(0.5, rgba(0,0,0,0)),
color-stop(0.5, rgba(255,255,255,0.1)),
to(rgba(255,255,255,0.3)));
-webkit-transform : rotate(-45deg) skew(-10deg, -10deg);
border-top-right-radius : 10px;
border-top-left-radius :0px;
border-bottom-right-radius : 0px;
border-bottom-left-radius : 10px;
border-left : 1.5px solid rgba(255,255,255,0.4);
box-shadow : 1px 1px 1px rgba(0,0,0,0.4) inset,
-1px 1px 1px rgba(0,0,0,0.5) inset;
-webkit-mask-image :
-webkit-gradient(linear, left top, right bottom,
from(#000000),
color-stop(0.4,#000000),
color-stop(0.5, transparent),
to(transparent));
} .ios-arrow-right {
cursor:pointer;
display : block;
position:absolute;
z-index : 0;
right:50px;
top:50px;
height:30px;
width:auto;
padding: 0 6px 0 10px;
background-repeat:repeat-x;
background-size : 100% 30px;
background-position :0;
background-image : -webkit-linear-gradient(
bottom,
rgba(0,0,0,0) 0%,
rgba(0,0,0,0) 50%,
rgba(255,255,255,0.1) 50%,
rgba(255,255,255,0.3) 100%
);
border-radius: 5px;
border-bottom: 1px solid rgba(255,255,255,0.4);
box-shadow :0 -1px 1px rgba(0,0,0,0.2)inset,
0 1px 2px rgba(0,0,0,0.8)inset;
font-family : HelveticaNeue;
font-weight: 400;
font-size : 12px;
line-height : 30px;
text-align:center;
color:#fff;
text-shadow : 0px -1px 0px rgba(0,0,0,0.8);
}
.ios-arrow-right:after{
position:absolute;
content : ' ';
right:-7.5px;
top:3px;
height : 24px;
width: 24px;
z-index : 1;
background-repeat:repeat-x;
background-size : 20px 20px;
background-position :-1px -0.5px;
background-image :
-webkit-gradient(linear, left bottom, right top,
from(rgba(255,255,255,0.3)),
color-stop(0.5, rgba(255,255,255,0.1)),
color-stop(0.5, rgba(0,0,0,0)),
to(rgba(0,0,0,0)));
-webkit-transform : rotate(135deg) skew(-10deg, -10deg);
border-top-right-radius : 10px;
border-top-left-radius :0px;
border-bottom-right-radius : 0px;
border-bottom-left-radius : 10px;
border-top : 1.5px solid rgba(255,255,255,0.4);
box-shadow : 1px 1px 1px rgba(0,0,0,0.5) inset,
-1px 1px 1px rgba(0,0,0,0.4) inset;
-webkit-mask-image :
-webkit-gradient(linear, left top, right bottom,
from(#000000),
color-stop(0.4,#000000),
color-stop(0.5, transparent),
to(transparent));
} .ios-arrow-right,
.ios-arrow-right:after,
.ios-arrow-left,
.ios-arrow-left:before {
background-color: rgba(33,33,33,1);/*normalcolor*/
} .ios-arrow-right:hover,
.ios-arrow-right:hover:after,
.ios-arrow-left:hover,
.ios-arrow-left:hover:before {
background-color: rgba(0,0,0,1);/*hovercolor*/
} /*************************************************

图2在线文档

现在,我们已经实现了在线查看文档的功能了,由于我们使用Javascript动态地加载文档内容,所以无需刷新页面,我们只需替换相应的文档链接地址就好了,这样不但减少了Http请求的次数减轻了网站的负载,而且无刷新用户体验更好。

1.1.3 总结

本文我们通过一个在线文档查看程序,介绍了通过jQuery实现动态加载数据的功能,通过使用jQuery动态加载数据无需刷新页面,只需替换相应的文档链接地址就好了,并且减少了网站的Http请求次数,减轻网络负载和加载延迟。

参考

[1] http://designshack.net/articles/javascript/coding-an-ajax-style-paged-document-viewer-with-jquery/

Demo

jQuery实现在线文档的更多相关文章

  1. Mergely – 免费的在线文档对比和合并工具

    任何类型的文件(无论是否代码),我们可能要比较不同的版本,看发生了什么变化. 有些编辑器都有这个内置功能,其中一些则没有. Mergely 是一个免费使用的 Web 应用程序,帮你你迅速作出文档的差异 ...

  2. 在线文档预览方案-office web apps续篇

    上一篇在线文档预览方案-office web apps发布后收到很多网友的留言提问,所以准备再写一篇,一来介绍一下域控服务器安装,总结一下大家问的多的问题,二来宣传预览服务安装与技术支持的事情. 阅读 ...

  3. 在线文档预览方案-office web apps

    最近在做项目时,要在手机端实现在线文档预览的功能.于是百度了一下实现方案,大致是将文档转换成pdf,然后在通过插件实现预览.这些方案没有具体实现代码,也没有在线预览的地址,再加上项目时间紧迫.只能考虑 ...

  4. [转载]在线文档预览方案-Office Web Apps

    最近在做项目时,要在手机端实现在线文档预览的功能.于是百度了一下实现方案,大致是将文档转换成pdf,然后在通过插件实现预览.这些方案没有具体实现代码,也没有在线预览的地址,再加上项目时间紧迫.只能考虑 ...

  5. jquery.cookie 使用文档,$.cookie() 文档教程, js 操作 cookie 教程文档。

    jquery.cookie 使用文档,$.cookie() 文档教程, js 操作 cookie 教程文档. jquery.cookie中的操作: jquery.cookie.js是一个基于jquer ...

  6. 在线文档转换API word,excel,ppt等在线文件转pdf、png

    在线文档转换API提供word,excel,ppt等在线文件转pdf.png等,文档:https://www.juhe.cn/docs/api/id/259 接口地址:http://v.juhe.cn ...

  7. java实现在线文档浏览

    目前发现两种方法: 1.http://dxx23.iteye.com/blog/1947083 FlexPaper+SWFTools ,java实现在线文档浏览 2.webOffice

  8. apidoc快速生成在线文档,apidoc生成静态文件的生成规则以及原理分析

    在老大的指引下,需要将系统的json文件格式转换成apidoc的json格式,也就是json格式的重组,但是这个apidoc的生成格式是不固定的,因为apidoc有自己一套的生成规则,我需要研究一下是 ...

  9. JEECG 新版在线文档WIKI正式发布

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/zhangdaiscott/article/details/80 JEECG 新版在线文档WIKI正式 ...

随机推荐

  1. 解压版MySQL5.7.1x的安装与配置

    解压版MySQL5.7.1x的安装与配置 MySQL安装文件分为两种,一种是msi格式的,一种是zip格式的.如果是msi格式的可以直接点击安装,按照它给出的安装提示进行安装(相信大家的英文可以看懂英 ...

  2. Groovy 处理 XML

    1. Parsing XML 1.1. XmlParser and XmlSlurper The most commonly used approach for parsing XML with Gr ...

  3. ServiceStack.OrmLite中的一些"陷阱"(3)

    前文说到如果使用多数据库(不同SQL方言)时要如何开发?其实前文(第二篇)也有“透露”到.就是直接使用库提供的OrmLiteConnection 及OrmLiteConnectionFactory(I ...

  4. 王爽-汇编语言-综合研究四-不使用main函数编程

    (一) 研究目的 使用C语言编程,我们一定要使用main函数么? (二) 研究过程 1) 最初的程序 首先,我们编写一个不写main函数的C语言程序. 程序如下: 在编译的过程中,没有发现错误.在链接 ...

  5. 修改win7电脑中所有文件的默认查看方式

    怎么修改win7电脑中所有文件的默认查看方式   如何设置才可以得到如下的效果:比如说打开一个盘符或者一个文件夹,进行设置之后,这个盘符里或者这个文件夹下的所有子文件夹.所有子文件夹里的所有文件都以“ ...

  6. jQuery学习-什么是jquery? Js与jquery之间的关系 Jquery选择器

    1.  什么是jQuery以及学习的意义等 jQuery是一个js库 JS库是什么? 把常用的方法,进行封装,封装到一个单独的js文件当中,要用的时候直接调用. 学习jQuery主要学什么? 学习jQ ...

  7. java的三元运算符

    1.三元运算符语法:判断表达式?表达式1:表达式2: (1)三元运算符适合于判断2个值到底使用哪一个! public static void mian(String[] args){ int sex= ...

  8. 46. Permutations 回溯算法

    https://leetcode.com/problems/permutations/ 求数列的所有排列组合.思路很清晰,将后面每一个元素依次同第一个元素交换,然后递归求接下来的(n-1)个元素的全排 ...

  9. oracle中用户删除不了,ORA-01940提示 “无法删除当前已连接用户”

    Oracle删除用户的提示无法删除当前已连接用户两种解决方法如下: 1.先锁定用户.然后查询进程号,最后删除对应的进程.在删除对应的用户 SQL>alter user XXX account l ...

  10. ofbiz 代码日记

    写代码一定要尽善尽美.. //修改方法 //条件查询 用于修改 List<GenericValue> stoList = delegator.findByAnd("YcrossS ...