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移动端 电子书 翻页效果的更多相关文章

  1. webapp应用--模拟电子书翻页效果

    前言: 现在移动互联网发展火热,手机上网的用户越来越多,甚至大有超过pc访问的趋势.所以,用web程序做出仿原生效果的移动应用,也变得越来越流行了.这种程序也就是我们常说的单页应用程序,它也有一个英文 ...

  2. Android电子书翻页效果实现

    这篇文章是在参考了别人的博客基础上,修改了其中一个翻页bug,并且加了详细注释 先看效果 其中使用了贝赛尔曲线原理,关于贝赛尔曲线的知识,推荐大家看下http://blog.csdn.net/hmg2 ...

  3. javascript 小清新颜色翻页效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. HTML5开发的翻页效果实例

    简介2010年F-i.com和Google Chrome团队合力致力于主题为<20 Things I Learned about Browsers and the Web>(www.20t ...

  5. c#翻页效果

    用c#和GDI+实现杂志翻页动画效果时间:2010-01-13 blog.csdn.net 周公 - 说明:以前本人参与个一个电子杂志项目,当时要求实现模拟现实生活中的杂志翻页动画效果,别人推荐了这篇 ...

  6. ajax翻页效果模仿yii框架

    ajax翻页效果,模仿yii框架. 复制代码代码如下: <!DOCTYPE html>  <html>  <head>  <title>ajax分页_w ...

  7. 6个超炫酷的HTML5电子书翻页动画

    相信大家一定遇到过一些电子书网站,我们可以通过像看书一样翻页来浏览电子书的内容.今天我们要分享的HTML5应用跟电子书翻页有关,我们精选出来的6个电子书翻页动画都非常炫酷,而且都提供源码下载,有需要的 ...

  8. Android 实现书籍翻页效果----完结篇

    By 何明桂(http://blog.csdn.net/hmg25) 转载请注明出处 之前由于种种琐事,暂停了这个翻页效果的实现,终于在这周末完成了大部分功能,但是这里只是给出了一个基本的雏形,没有添 ...

  9. Android 实现书籍翻页效果----升级篇

    自从之前发布了<Android 实现书籍翻页效果----完结篇 >之后,收到了很多朋友给我留言,前段时间由于事情较多,博客写得太匆忙很多细节地方没有描述清楚.所以不少人对其中的地方有不少不 ...

随机推荐

  1. CentOS 修改固定IP地址

    CentOS 修改固定IP地址 参考地址:https://www.cnblogs.com/technology-huangyan/p/9146699.htmlhttps://blog.csdn.net ...

  2. Django 测试开发1

    笔者用的版本的是django==1.8.2,这个版本的学习资料最多,文档最完整.首先创建项目:django-admin startproject 项目名. guest/__init__.py 一个空的 ...

  3. jar启动脚本shell

    #!/bin/bash#这里可替换为你自己的执行程序,其他代码无需更改 APP_NAME=/opt/server/msp/health-api/health-2.0.2.jar#使用说明,用来提示输入 ...

  4. 阶段5 3.微服务项目【学成在线】_day07 课程管理实战_03-新增课程-课程分类查询

    2 新增课程 2.1 需求分析 用户操作流程如下: 1.用户进入“我的课程”页面,点击“新增课程”,进入新增课程页面 2.填写课程信息,选择课程分类.课程等级.学习模式等. 3.信息填写完毕,点击“提 ...

  5. 123457---com.threeObj.Baobaoshizi01--- 宝宝识字01

    com.threeObj.Baobaoshizi01--- 宝宝识字01

  6. Release报错Debug无错

    代码在Release模式下会crash,Debug模式下可以运行,最后定位到原因 for (size_t j = 0; j < ids.size()-1; ++j) { } 发现问题是Relea ...

  7. IDEA的查询引用、调用关系图的功能(转)

    转自: http://www.cnblogs.com/ghj1976/p/5382455.html Eclipse的"Call Hierarchy"可以查看一个Java方法或类成员 ...

  8. 01.轮播图之五 :一个 imageView也能 作 轮播

    这个是最近才写的,本以为实现起来很有难度,需要更高深的理论, 写完之后,才发现自己错误的离谱: 之所以能用一个imageview 实现轮播 基于两点::: 使用 imageview 的layer 层设 ...

  9. (一)Asp.net web api中的坑-【找不到与请求 URI匹配的 HTTP 资源】

    在.net下,创建一个HTTP服务,有很多方案,比较老ashx,一般处理程序(HttpHandler), Web Service SOAP协议的,数据格式是XML,HTTP协议         WCF ...

  10. 利用 AWS 无服务架构之语音合成

    目录 一.架构图 二.服务部署 2.1.创建 DynamoDB 表 2.2.创建 S3 2.2.1 静态网页存储桶 2.2.2.音频存储桶 2.3.创建 SNS Topic 2.4.为 Lambda ...