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 实现书籍翻页效果----完结篇 >之后,收到了很多朋友给我留言,前段时间由于事情较多,博客写得太匆忙很多细节地方没有描述清楚.所以不少人对其中的地方有不少不 ...
随机推荐
- oracle 导入导出功能
关于expdp和impdp 使用EXPDP和IMPDP时应该注意的事项: EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用. - EXPDP和IMPDP是服务端的工具程序,他 ...
- 什么是IO流
先看一段百度上的解释: 当然:如果你看不懂,那么你只需要记住下面3句话. 1. (1).我们知道,每个人家里喝的水都是从自来水厂来的,自来水厂的水又是从水源地来的, (2).水是通过水管来的. (3) ...
- C++ STL介绍——String类
目录 1.简介 2.string类成员函数汇总 3.String类的构造函数以及析构函数 4.获取字符串长度 5.获取字符串元素 6.字符串比较方法 7.字符串输入输出 8.字符串查找函数 1.简介 ...
- 配置BeautifulSoup4+lxml+html5lib
序 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数 ...
- mac、windows、linux版jdk1.8下载
链接: https://pan.baidu.com/s/1Yjs6GIxURiocq30zZ7heYQ 提取码: g6i8
- ios 新建app iphone 、 ipad or universal ?
很久没有关注这个新建app的 时候 选什么的问题了, 因为我们一般在公司 都是 已经建立好的app 直接 在那上面开发. 所以很久不建立新app 遇到新的app需要你自己去创建的时候 可能就会 有突 ...
- nVidia GPGPU vs AMD Radeon HD Graphics执行模式对比
大家做高性能计算的朋友,想必对CPU的执行模式已经非常熟悉了吧.当代高级些的CPU一般采用超标量流水线,使得毗邻几条相互独立的指令能够并行执行——这称为指令集并行(ILP,Instruction-Le ...
- Linux 验证当前 Video0 不否是v4l设备 linux v4l 编程(1) Video 4 Linux 简介
#include <stdio.h> #include <string.h> #include <errno.h> #include <sys/types.h ...
- npm教程、脚手架
使用之前,我们先来掌握3个东西是用来干什么的. npm: Nodejs下的包管理器. webpack: 它主要的用途是通过CommonJS的语法把所有浏览器端需要发布的静态资源做相应的准备,比如资源的 ...
- React Native设置图片全屏背景显示
显示效果如下: 实现和页面代码如下: 1> 使用的react-navigation隐藏导航栏: AddTopic: {screen: AddTopicScreen,navigationOptio ...