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移动端 电子书 翻页效果的更多相关文章
- webapp应用--模拟电子书翻页效果
前言: 现在移动互联网发展火热,手机上网的用户越来越多,甚至大有超过pc访问的趋势.所以,用web程序做出仿原生效果的移动应用,也变得越来越流行了.这种程序也就是我们常说的单页应用程序,它也有一个英文 ...
- Android电子书翻页效果实现
这篇文章是在参考了别人的博客基础上,修改了其中一个翻页bug,并且加了详细注释 先看效果 其中使用了贝赛尔曲线原理,关于贝赛尔曲线的知识,推荐大家看下http://blog.csdn.net/hmg2 ...
- javascript 小清新颜色翻页效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- HTML5开发的翻页效果实例
简介2010年F-i.com和Google Chrome团队合力致力于主题为<20 Things I Learned about Browsers and the Web>(www.20t ...
- c#翻页效果
用c#和GDI+实现杂志翻页动画效果时间:2010-01-13 blog.csdn.net 周公 - 说明:以前本人参与个一个电子杂志项目,当时要求实现模拟现实生活中的杂志翻页动画效果,别人推荐了这篇 ...
- ajax翻页效果模仿yii框架
ajax翻页效果,模仿yii框架. 复制代码代码如下: <!DOCTYPE html> <html> <head> <title>ajax分页_w ...
- 6个超炫酷的HTML5电子书翻页动画
相信大家一定遇到过一些电子书网站,我们可以通过像看书一样翻页来浏览电子书的内容.今天我们要分享的HTML5应用跟电子书翻页有关,我们精选出来的6个电子书翻页动画都非常炫酷,而且都提供源码下载,有需要的 ...
- Android 实现书籍翻页效果----完结篇
By 何明桂(http://blog.csdn.net/hmg25) 转载请注明出处 之前由于种种琐事,暂停了这个翻页效果的实现,终于在这周末完成了大部分功能,但是这里只是给出了一个基本的雏形,没有添 ...
- Android 实现书籍翻页效果----升级篇
自从之前发布了<Android 实现书籍翻页效果----完结篇 >之后,收到了很多朋友给我留言,前段时间由于事情较多,博客写得太匆忙很多细节地方没有描述清楚.所以不少人对其中的地方有不少不 ...
随机推荐
- gacutil.exe的位置
如果我们需要用gacutil去注册dll ,就需要使用Visual Studio的Command Prompt,前提是需要安装Visual Studio,但是客户端上一般是没有安装VS的,所以你就需要 ...
- TortoiseGit进行squash后冲突,如何撤销
还没有commit之前,需要撤销. 最暴力的,直接用git reset --hard HEAD How to undo a git merge squash? If you run git merge ...
- NLP 文本预处理
1.不同类别文本量统计,类别不平衡差异 2.文本长度统计 3.文本处理,比如文本语料中简体与繁体共存,这会加大模型的学习难度.因此,他们对数据进行繁体转简体的处理. 同时,过滤掉了对分类没有任何作用的 ...
- Maven多镜像配置
Maven阿里云镜像相信国内用得是很爽的,但有时候,一些版本的包明明可以在http://mvnrepository.com上搜索到.但你确实下载不来... 废话不多,settings.xml多镜像配置 ...
- vue项目中 favicon.ico不能正确显示的问题
方法一:修改index.html文件 <link rel="shortcut icon" type="image/x-icon" href="f ...
- 解读typescript中 super关键字的用法
解读typescript中 super关键字的用法 传统的js,使用prototype实现父.子类继承.如果父.子类有同名的方法,子类去调用父类的同名方法需要用 “父类.prototype.metho ...
- List&Set
List a.普通for循环, 使用get()逐个获取 b.调用iterator()方法得到Iterator, 使用hasNext()和next()方法 c.增强for循环, 只要可以使用Iterat ...
- lua日期处理函数
function day_step(old_day,step) local y,m,d if("0" ~= string.sub(old_day,6,6)) then ...
- Qps 和 tps的解释
QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准. TPS:是Transactions ...
- OpenStack Smaug项目简介
1 项目简介 Smaug是一个OpenStack中提供应用数据保护服务的项目. 2 项目使命 在OpenStack中建立应用数据保护的标准和规范. 保护OpenStack中的任何资源以及资源的依赖项. ...