turn.js异步加载实现翻书效果

本文实例为大家分享了turn.js异步加载实现翻书效果的具体代码,供大家参考,具体内容如下

1、阅读翻书js

/**
 * 电子翻书
 */
//var width = 1080;
//var height = 1680;

var width = "10rem";
var height = "15.2rem";

window.onload = function () {

  //预加载
  //loading(18,1);
 initData();
}

function getQueryString(name) {
  var result = window.location.search.match(new RegExp("[\?\&]" + name + "=([^\&]+)", "i"));
  if (result == null || result.length < 1) {
    return "";
  }
  return result[1];
}

function initData(){
 var book = getQueryString("bookId");
 var count = getQueryString("pageCount");
 loading_img_url = new Array();
 for (var i = 0; i < count; i++) {
 loading_img_url.push((i+1) + ".png");
 }
 var page = getQueryString("pageNum");
 if(!page){
 page =1;
 }
 loading(book,count,page);
}

var date_start;
var date_end;
date_start = getNowFormatDate();
//加载图片
var loading_img_url = [];

//加载页面
function loading(book,count,page) {
  var numbers = 0;
  var length = loading_img_url.length;
  //var resUrl = ctxStatic+"/modules/intelligentquery/img/3/";
  var resUrl = website + "/lawcase/bookScreenshot?bookId=" + book + "&page=";
  var jsUrl = ctxStatic+"/modules/front/guide/vertical/";
  var bookId = book;
    var img = new Image();
    img.src = resUrl + page;
    //img.src = resUrl + pageNum + ".png";
    img.onerror = function () {
      numbers += (1 / length) * 100;
    }
    img.onload = function () {
      numbers += (1 / length) * 100;
      $('.number').html(parseInt(numbers) + "%");
      console.log(numbers);
      if (Math.round(numbers)) {
        //$('.number').hide();
        date_end = getNowFormatDate();
        var loading_time = date_end - date_start;
        //预加载图片
        $(function progressbar() {
          //拼接图片
          $('.shade').hide();
          var tagHtml = "";
          var imgUrl = resUrl + page;
          //var imgUrl = resUrl + (pageNum) + ".png";
          if (pageNum == 1) {
            tagHtml += "<div id='first'><img src='"+imgUrl+"' /></div>";
          } else if (pageNum == length) {
            tagHtml += "<div id='first'><img src='"+imgUrl+"' /></div>";
          } else {
            tagHtml += "<div><img src='"+imgUrl+"' /></div>";
          }
          $(".flipbook").append(tagHtml);
          var w = $(".graph").width();
          $(".flipbook-viewport").show();
        });

        //配置turn.js
        function loadApp() {
          var w = width;
          var h = height;
          $('.flipboox').width(w).height(h);
          $('.flipbook').turn({
            width: w,
            height: h,
            elevation: 50,
            pages: count,
            display: 'single',
            gradients: true,
            autoCenter: true,
            when: {
              turning: function (e, page, view) {
                var total = $(".flipbook").turn("pages");//总页数
                $("#currentPage").html(page);
                $("#pageCount").html("/"+total);
                if (page == 1) {
                  $(".btnImg").css("display", "none");
                  $(".mark").css("display", "block");
                } else {
                  $(".btnImg").css("display", "block");
                  $(".mark").css("display", "none");
                }
                if (page == length) {
                  $(".nextPage").css("display", "none");
                } else {
                  $(".nextPage").css("display", "block");
                }
              },
              turned: function (e, page, view) {
                var total = $(".flipbook").turn("pages");//总页数
                $("#currentPage").html(page);
                $("#pageCount").html("/"+total);
                // 判断翻页按钮点击事件以及状态样式
                if(page >= total){
                  $("#next").addClass("btn-invalid").removeAttr('onclick');
                }else{
                  $("#next").removeClass("btn-invalid").attr("onclick","next();");
                }
                if(page == 1){
                  $("#prev").addClass("btn-invalid").removeAttr('onclick');
                  $("#indexPage").css("display","none");
                }else{
                  $("#prev").removeClass("btn-invalid").attr("onclick","prev();");
                  $("#indexPage").css("display","flex");
                }
              },
              missing: function (e, pages) {
                for (var i = 0; i < pages.length; i++) {
                  addPage(pages[i], $(this),bookId);
                }
              }

            }
          })
   var cpage = getQueryString("pageNum");
   $(".flipbook").turn('page', cpage);
        }
        yepnope({
          test: Modernizr.csstransforms,
          yep: [jsUrl+'js/turn.js'],
          complete: loadApp
        });
      }
    }
}

function getNowFormatDate() {
  var date = new Date();
  var seperator1 = "";
  var seperator2 = "";
  var month = date.getMonth() + 1;
  var strDate = date.getDate();
  if (month >= 1 && month <= 9) {
    month = "0" + month;
  }
  if (strDate >= 0 && strDate <= 9) {
    strDate = "0" + strDate;
  }
  var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate
    + "" + date.getHours() + seperator2 + date.getMinutes()
    + seperator2 + date.getSeconds();
  return currentdate;
}

//异步加载
function addPage(page, book,bookId) {
  //var resUrl = ctxStatic+"/modules/intelligentquery/img/3/";
  var resUrl = website + "/lawcase/bookScreenshot?bookId=" + bookId + "&page=";
  var imgUrl = resUrl + (page);
  var tagHtml = "";
  if (page == 1) {
    tagHtml += "<div id='first'><img src='"+imgUrl+"' /></div>";
  } else if (page == length) {
    tagHtml += "<div id='end'><img src='"+imgUrl+"' /></div>";
  } else {
    tagHtml += "<div><img src='"+imgUrl+"' /></div>";
  }

  // Check if the page is not in the book
  if (!book.turn('hasPage', page)) {
    // Create an element for this page
    var element = $('<div />').html('');
    // Add the page
    book.turn('addPage', element, page);
    element.html(tagHtml);
  }
}

2、阅读页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="front" value="${frontPath}${pageContext.request.contextPath}/f"/>
<c:set var="ctxStatic" value="${pageContext.request.contextPath}/static"/>
<c:set var="website" value="${pageContext.request.contextPath}"/>
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
  <meta name="format-detection" content="telephone=no">
  <meta name="apple-mobile-web-app-capable" content="yes"/>
  <meta name="apple-mobile-web-app-status-bar-style" content="black"/>
  <title>阅读</title>
 <script src="${ctxStatic}/plugins/jquery-3.2.1.min.js"></script>
 <script src="${ctxStatic}/plugins/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
  <script src="${ctxStatic}/modules/front/guide/vertical/common/js/common.js"></script>
  <script type="text/javascript" src="${ctxStatic}/modules/front/guide/vertical/js/modernizr.2.5.3.min.js"></script>

  <script type="text/javascript" src="${ctxStatic}/modules/front/guide/vertical/js/main.js"></script>
  <script src="${ctxStatic}/modules/front/guide/vertical/common/js/flexible.js"></script>

  <link href="${ctxStatic}/modules/front/guide/vertical/css/app-base.css" rel="external nofollow" rel="stylesheet">
  <style type="text/css">
 .flipbook img{
  width:10rem;
  height:15.2rem;
 }
 .book-wrapper{
  background-image: url('');
 }
 </style>

</head>
<body>
  <div class="flex-container">
    <header class="banner2">
      <h1>阅读</h1>
    </header>
    <div class="page-content judicial-wrapper book-wrapper">
      <!-- 书本区域 -->
      <div class="flipbook-viewport book-box boox-details" style="display:none;">
        <div class="previousPage"></div>
        <div class="nextPage"></div>
        <div class="return"></div>
        <div class="container">
          <div class="flipbook">
          </div>
        </div>
      </div>
    </div>
    <!-- 悬浮菜单 -->
    <nav class="menu-right">
      <div class="paging-box">
        <ul>
          <li>
            <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" id="goBack" class="i-orange"> <i class="icon-undo2"></i></a>
          </li>
          <li>
            <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" id="prev" class="prev-page" οnclick="prev()"> <i class="icon-arrow-up2"></i></a>
          </li>
          <li class="paging-item">
            <p id="pageNum"><span id="currentPage">0</span><span id="pageCount">/0</span></p>
          </li>
          <li>
            <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" id="next" class="next-page" οnclick="next()"> <i class="icon-arrow-down2"></i></a>
          </li>
          <li>
            <div class="skip-page">
              <span>跳至</span>
              <input id="skip-page-num" type="text" name="skip-toPage">
              <div id="softkey"></div>
              <span>页</span>
            </div>
          </li>
          <li>
            <a href="${front}/guide/vertical/index" rel="external nofollow" class="color-home"> <i class="icon-homepage_fill"></i></a>
          </li>
        </ul>
      </div>
    </nav>
  </div>
</body>
</html>

<script>

  var ctxStatic = "${ctxStatic}";
  var website = "${website}";

  //上一页
  function prev(){
    var currentPage = $(".flipbook").turn("page");
    $(".flipbook").turn('page', currentPage - 1);
  }
  // 下一页
  function next() {
    var currentPage = $(".flipbook").turn("page");
    $(".flipbook").turn('page', currentPage + 1);
  }

  var temp_couter = 0;
  // 模拟数字键盘
  var softkey = document.getElementById("softkey");
  var input1 = document.getElementById("skip-page-num");
  $('#skip-page-num').focus(function(){
    new KeyBoard(input1,softkey);
  });

  //跳页
  function _global_keyboard_close_btn_callback(value){
    var pageNum = parseInt(value);
    var total = parseInt(getQueryString("pageCount"));
    if(pageNum <= 1){
      pageNum = 1;
    }else if(pageNum >= total){
      pageNum = total;
    }

    $("#skip-page-num").val(pageNum);
    $(".flipbook").turn('page', pageNum);
  }

</script>
<script src="${ctxStatic}/modules/front/guide/vertical/common/virtualkeyboard/keyboard.js"></script>

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

(0)

相关推荐

  • 移动端H5开发 Turn.js实现很棒的翻书效果

    最近CTO给我分配了一个移动端H5开发的任务,主要功能是需要实现翻书效果,我听过主要需求后,当时是呀!!!接下来自己尝试使用 fullPage.js和Swiper来实现翻书效果,结果效果都不是非常的理想,后来想起自己曾经做过PC版的翻书效果,当时使用的是Turn.js,查过其相关API后,整个人突然豁然开朗呀,使用Turn.js 完全可以解决当前我接手这个项目的所有需求呀.现在将个人的学习总结如下,若有不正确的地方,欢迎读者给与批评指正! Turn.js的官方网址: http://www.tur

  • 基于Turn.js 实现翻书效果实例解析

    最近项目经理我个项目练练手,其项目需求是要实现翻书效果,看到这个需求后,我真是懵了,这咋整,我可是java出身的啊,这个问题真是难住我了,后来有同事的指导,之前他曾经做过PC版的翻书效果,当时使用的是Turn.js ,查过其相关API后,整个人突然豁然开朗呀,使用Turn.js 完全可以解决当前我接手这个项目的所有需求呀.下面小编把我的学习心得分享给大家,大家可以参考下 Turn.js的官方网址: http://www.turnjs.com/ 下面是我这个项目上线后的效果: 看过实际项目后,各位

  • turn.js异步加载实现翻书效果

    本文实例为大家分享了turn.js异步加载实现翻书效果的具体代码,供大家参考,具体内容如下 1.阅读翻书js /** * 电子翻书 */ //var width = 1080; //var height = 1680; var width = "10rem"; var height = "15.2rem"; window.onload = function () { //预加载 //loading(18,1); initData(); } function getQ

  • 浅析JS异步加载进度条

    展现效果: 1) 当点击Load的时候,模拟执行异步加载. 浏览器被遮挡. 进度条出现. 实现思路: 1.当用户点击load button执行异步请求. 调用方法 出现加载条 2.怎么实现进度条呢? 1) 在document.body 新增一个div.覆盖浏览器. 设置背景会灰色. z-index = 999. 加载的时候让用户无法修改界面值 2) 在document.body 新增一个动态的div. 代码实现: Main.html: <!DOCTYPE html> <html>

  • 点评js异步加载的4种方式

    js异步加载的4种方式,点评开始. 方案1:$(document).ready <!DOCTYPE html> <html> <head> <script src="http://common.cnblogs.com/script/jquery.js" type="text/javascript"></script> <script type="text/javascript"&g

  • JS异步加载的三种实现方式

    js加载的缺点:加载工具方法没必要阻塞文档,过多js加载会影响页面效率,一旦网速不好,那么整个网站将等待js加载而不进行后续渲染等工作. 有些工具方法需要按需加载,用到再加载,不用不加载,. 默认正常模式下下,JS是同步加载的,即优先加载JS,只有当JS文件下载完,dom和css才开始加载,当某些时候我们需要JS异步加载,我们可以通过以下方式来设置异步加载,不同情况下选取不同方式即可 1.defer:defer JS异步下载,dom结构解析完(标签 + 样式(内容不一定下载完))才异步执行 仅I

  • 详解JS异步加载的三种方式

    一:同步加载 我们平时使用的最多的一种方式. <script src="http://yourdomain.com/script.js"></script> <script src="http://yourdomain.com/script.js"></script> 同步模式,又称阻塞模式,会阻止浏览器的后续处理,停止后续的解析,只有当当前加载完成,才能进行下一步操作.所以默认同步执行才是安全的.但这样如果js中有输

  • yepnope.js 异步加载资源文件

    典型代码示例 复制代码 代码如下: yepnope({ test : Modernizr.geolocation, yep : 'normal.js', nope : ['polyfill.js', 'wrapper.js'] }); 当Modernizr.geolocation为真时,加载yep项也就是"normal.js",否则加载nope项--可以同时加载多个文件. yepnope和现有的xxx script loader有什么区别? 个人认为主要 是这两点: 可以同时处理jav

  • js异步加载的三种解决方案

    默认情况javascript是同步加载的,也就是javascript的加载时阻塞的,后面的元素要等待javascript加载完毕后才能进行再加载,对于一些意义不是很大的javascript,如果放在页头会导致加载很慢的话,是会严重影响用户体验的. (1) defer,只支持IE defer属性的定义和用法(我摘自w3school网站) defer 属性规定是否对脚本执行进行延迟,直到页面加载为止. 有的 javascript 脚本 document.write 方法来创建当前的文档内容,其他脚本

  • 如何使用headjs来管理和异步加载js

    现在有许多成熟的js模块加载器,比如requirejs和seajs等,但是对一些小的项目来说,它们的功能可能太过于"强大",也许我们只是想要有一个能动态加载js的功能,或许我们只是想装B一下,让自己写出的页面没有一大堆的这样的东西.前面说的两种js加载器都是更强调模块性,也就是更强调js文件的组织和管理,更适用于大的项目. 就像刚刚说的,我只想有一个js文件加载器,我只需提供给它一个js文件的地址就行了的那种呢?那就进入我们的主题了,使用headjs吧. 首先,我想说一下Javascr

  • JavaScript异步加载浅析

    前言 关于JavaScript脚本加载的问题,相信大家碰到很多.主要在几个点-- 1> 同步脚本和异步脚本带来的文件加载.文件依赖及执行顺序问题 2> 同步脚本和异步脚本带来的性能优化问题 深入理解脚本加载相关的方方面面问题,不仅利于解决实际问题,更加利于对性能优化的把握并执行.   先看随便一个script标签代码-- 复制代码 代码如下: <script src="js/myApp.js"></script> 如果放在<head>上面

随机推荐