jQuery如何实现在线文档
沉沙 2018-05-28 来源 : 阅读 1168 评论 0

摘要:本文我们通过一个在线文档查看程序,介绍了通过jQuery实现动态加载数据的功能,通过使用jQuery动态加载数据无需刷新页面,只需替换相应的文档链接地址就好了,并且减少了网站的Http请求次数,减轻网络负载和加载延迟。希望阅读本篇文章以后大家有所收获,加深大家对jQuery的理解。

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

本文,我们将通过Javascript方式实现在线阅读这一功能。

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>

 jQuery如何实现在线文档

图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*/}
/*************************************************

jQuery如何实现在线文档

图2在线文档

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


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


本文由职坐标整理发布,更多相关内容,请关注职坐标WEB前端jQuery频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程