javascript移动端 电子书 翻页效果实现代码


Posted in Javascript onSeptember 07, 2019

这篇文章主要介绍了javascript移动端 电子书 翻页效果实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

效果

javascript移动端 电子书 翻页效果实现代码

1、后端给一长串的纯文本

2、前端根据屏幕的高度,将文本切割为 n 页

3、使用插件 turn.js 将切割好的每页,加上翻书效果

代码

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <title>手机端书本翻页效果</title>
    <style type="text/css">
      * {
        padding: 0;
        margin: 0;
      }
 
      html,
      body {
        height: 100%;
        width: 100%;
      }
 
      #magazine {
        width: 100%;
        height: 100%;
        position: relative;
        overflow: hidden;
         
      }
 
      #pages {
        width: 100%;
        height: 100%;
        position: relative;
        z-index: 1;
      }
      #pages div.turn-page{
        background: #fff;
      }
      #content{
        height: 0;
        overflow: hidden;
        width: 100%;
      }
      #contentText{
        width: 100%;
      }
       
      /* 这里是内容的样式,修改时候,一起修改 */
      div.turn-page,#contentText{
        white-space: pre-wrap;
        box-sizing: border-box;
        padding: 0 10px;
      }
       
       
      #alert{
        position: absolute;
        bottom: 40px;
        left: 50%;
        transform: translateX(-50%);
        background: rgba(0,0,0,0.6);
        border-radius: 4px;
        color: #fff;
        z-index: 10;
        font-size: 12px;
        padding: 6px 10px;
        display: none;
      }
    </style>
  </head>
  <body>
 
    <div id="magazine">
      <div id="pages"></div>
      <div id="content">
        <div id="contentText"></div>
      </div>
    </div>
    <div id="alert"></div>
    <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
    <script type="text/javascript" src="js/turn.js"></script>
     
    <script type="text/javascript">
      var writeStr = ""
       
      //模拟请求文本数据
      $.get("./js/data.txt",function(data){
        initPage(data);
      })
       
 
      function initPage(writeStr){
        if(!writeStr){
          return ;
        }
       
        var $wrap = $("#magazine");
        var $page = $("#pages");
        var w =$page.width(); //窗口的宽度
        var h = $page.height(); //窗口的高度
        console.log(h)
        var $content = $("#contentText");
         
        $content.html(writeStr);
        var len = writeStr.length; //总长度
        var cH = $content.height(); //总高度
        var pageStrNum; //每页大概有多少个字符
        if(cH > h){
          pageStrNum = (h / cH )*len; //每页大概有多少个字符
          var obj = overflowhiddenTow($content,writeStr,h);
          $page.append('<div>'+obj.curr+'</div>');
          while(obj.next && obj.next.length > 0){
            obj = overflowhiddenTow($content, obj.next,h);
            $page.append('<div>'+obj.curr+'</div>');
          }
        }else{
          return ;
        }
         
        //文字切割算法
        function overflowhiddenTow($texts, str , at) {
          var throat = pageStrNum;
          var tempstr = str.substring(0, throat);
          var len = str.length;
          $texts.html(tempstr);
          //取的字节较少,应该增加
          while ($texts.height() < at && throat < len) {
            throat = throat + 2;
            tempstr = str.substring(0, throat);
            $texts.html(tempstr);
          }
          //取的字节较多,应该减少
          while ($texts.height() > at && throat > 0) {
            throat = throat - 2;
            tempstr = str.substring(0, throat);
            $texts.html(tempstr);
          }
           
          return {
            curr:str.substring(0,throat),
            next:str.substring(throat)
          }
         
        }
         
        $page.turn({
          width: w,
          height: h,
          elevation: 50,
          display: 'single',
          gradients: true,
          autoCenter: true,
          when: {
            start: function() {},
            turning: function(e, page, view) {},
            turned: function(e, page, view) {
               
            }
          }
        });
         
         
         
        var moveObj = null;
        var endObj = null;
         
        function getPoint(e) {
          var obj = e;
          if (e.targetTouches && e.targetTouches.length > 0) {
            obj = e.targetTouches[0];
          }
          return obj;
        }
         
         
        $wrap.on("touchstart mousedown", function(e) {
          var obj = getPoint(e);
          moveObj = {
            x: obj.clientX
          };
        });
        $wrap.on("touchmove mousemove", function(e) {
          var obj = getPoint(e);
          endObj = {
            x: obj.clientX
          };
        });
         
         
        $wrap.on("touchend mouseup", function(e) {
          if (moveObj && endObj) {
            var mis = endObj.x - moveObj.x;
            if (Math.abs(mis) > 30) {
              var pageCount = $page.turn("pages"); //总页数
              var currentPage = $page.turn("page"); //当前页
              if (mis > 0) {
                if (currentPage > 1) {
                  $page.turn('page', currentPage - 1);
                } else {
                  console.log("已经是第一页")
                  showAlert('已经是第一页');
                }
              } else {
                if (currentPage < pageCount) {
                  $page.turn('page', currentPage + 1);
                } else {
                  console.log("最后一页");
                  showAlert('已经是最后一页');
                }
              }
         
            }
         
          }
          moveObj = null;
          endObj = null;
        });
         
        var $alert = $("#alert");
        var timer = null;
        function showAlert(msg){
          clearTimeout(timer);
          $alert.text(msg);
          $alert.fadeIn();
          timer = setTimeout(function(){
            $alert.fadeOut();
          },1000)
        }
      }
    </script>
  </body>
</html>

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

Javascript 相关文章推荐
JQuery 插件制作实践 xMarquee插件V1.0
Apr 02 Javascript
整理一些JavaScript的IE和火狐的兼容性注意事项
Mar 17 Javascript
基于jQuery的前端数据通用验证库
Aug 08 Javascript
js运动框架_包括图片的淡入淡出效果
May 11 Javascript
js和jquery设置disabled属性为true使按钮失效
Aug 07 Javascript
javascript中字符串拼接详解
Sep 26 Javascript
排序算法的javascript实现与讲解(99js手记)
Sep 28 Javascript
基于javascript实现全屏漂浮广告
Mar 31 Javascript
整理关于Bootstrap列表组的慕课笔记
Mar 29 Javascript
浅析从vue源码看观察者模式
Jan 29 Javascript
js 使用ajax设置和获取自定义header信息的方法小结
Mar 12 Javascript
详解React的回调渲染模式
Sep 10 Javascript
使用 js 简单的实现 bind、call 、aplly代码实例
Sep 07 #Javascript
vue 使用高德地图vue-amap组件过程解析
Sep 07 #Javascript
vue 的 solt 子组件过滤过程解析
Sep 07 #Javascript
javascript的惯性运动实现代码实例
Sep 07 #Javascript
vue的滚动条插件实现代码
Sep 07 #Javascript
微信小程序页面滚动到指定位置代码实例
Sep 07 #Javascript
通过vue写一个瀑布流插件代码实例
Sep 07 #Javascript
You might like
浅谈apache和nginx的rewrite的区别
2013/02/22 PHP
帝国cms常用标签汇总
2015/07/06 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
CI框架(CodeIgniter)实现的数据库增删改查操作总结
2018/05/23 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
PHP实现的AES双向加密解密功能示例【128位】
2018/09/03 PHP
PHP实现单例模式建立数据库连接的方法分析
2020/02/11 PHP
Discuz! 6.1_jQuery兼容问题
2008/09/23 Javascript
初窥JQuery(一)jquery选择符 必备知识点
2010/11/25 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
js中使用replace方法完成某个字符的转换
2014/08/20 Javascript
IE6浏览器中window.location.href无效的解决方法
2014/11/20 Javascript
smartcrop.js智能图片裁剪库
2015/10/14 Javascript
JavaScript中的原始值和复杂值
2016/01/07 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
2016/05/24 Javascript
JQuery 动态生成Table表格实例代码
2016/12/02 Javascript
JQuery判断正整数整理小结
2017/08/21 jQuery
VueJs里利用CryptoJs实现加密及解密的方法示例
2019/04/29 Javascript
Vue的全局过滤器和私有过滤器的实现
2020/04/20 Javascript
浅析VUE防抖与节流
2020/11/24 Vue.js
Nest.js环境变量配置与序列化详解
2021/02/21 Javascript
浅谈numpy库的常用基本操作方法
2018/01/09 Python
python调用xlsxwriter创建xlsx的方法
2018/05/03 Python
Python使用MyQR制作专属动态彩色二维码功能
2019/06/04 Python
Pycharm保存不能自动同步到远程服务器的解决方法
2019/06/27 Python
python3中pip3安装出错,找不到SSL的解决方式
2019/12/12 Python
Python单元测试模块doctest的具体使用
2020/02/10 Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
2020/09/28 Python
Python利用socket模块开发简单的端口扫描工具的实现
2021/01/27 Python
Ray-Ban雷朋太阳眼镜英国官网:Ray-Ban UK
2019/11/23 全球购物
化工实习心得体会
2014/09/09 职场文书
乡镇计划生育工作汇报
2014/10/28 职场文书
2014年路政工作总结
2014/12/10 职场文书
幼儿园大班教师个人工作总结
2015/02/05 职场文书
父母教会我观后感
2015/06/17 职场文书
2016七一建党节慰问信
2015/11/30 职场文书