目录
-
简介与特性
-
环境准备与安装
-
基础用法与初始化
-
配置参数详解
-
事件监听与交互
-
动态加载与页面管理
-
兼容性与性能优化
-
常见问题与解决方案
-
完整示例代码
1. 简介与特性
Turn.js 是一个基于 jQuery 的 JavaScript 库,专注于实现类书籍翻页的 3D 动画效果,支持 HTML5 和 CSS3,适配移动端触摸设备。其核心优势包括:
-
逼真的翻页动画:支持阴影、翻页角度、双页/单页模式等视觉效果26。
-
高度可定制:通过参数配置调整尺寸、翻页方向、过渡时间等38。
-
跨平台兼容:兼容主流浏览器(包括 IE8+ 需额外插件)47。
-
动态加载:支持按需加载页面内容,优化性能58。
2. 环境准备与安装
依赖项
-
jQuery 1.7+:Turn.js 基于 jQuery,需先引入16。
-
浏览器支持:Chrome、Firefox、Safari、Edge 等现代浏览器;IE8 需引入
turn.html4.js
4。
安装方式
通过 npm 安装:
npm install turn.js
或直接引入 CDN 资源:
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="path/to/turn.min.js"></script>
3. 基础用法与初始化
HTML 结构
创建容器元素,每个 .page
类代表一页:
<div id="flipbook">
<div class="hard">封面</div>
<div class="page">第1页</div>
<div class="page">第2页</div>
<div class="hard">封底</div>
</div>
JavaScript 初始化
$(document).ready(function() {
$('#flipbook').turn({
width: 800,
height: 600,
autoCenter: true,
page: 1,
gradients: true
});
});
参数说明:
-
width
/height
:书本尺寸。 -
autoCenter
:是否自动居中。 -
page
:初始页码16。
4. 配置参数详解
核心配置项
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
acceleration | boolean | true | 启用硬件加速(移动端必选)38。 |
direction | string | ltr | 翻页方向(ltr 左到右,rtl 右到左)6。 |
display | string | double | 显示模式(single 单页,double 双页)8。 |
duration | number | 600 | 翻页动画时长(毫秒)6。 |
gradients | boolean | true | 是否显示翻页阴影3。 |
进阶配置
-
动态设置总页数:
$('#flipbook').turn('pages', 10); // 设置总页数为10
-
自定义翻页角度:
elevation: 50 // 翻页时的弯曲高度:cite[3]。
5. 事件监听与交互
常用事件
事件名 | 触发时机 | 示例用法 |
---|---|---|
turning | 翻页开始前触发 | 预加载下一页内容5。 |
turned | 翻页完成后触发 | 更新页码显示5。 |
start | 用户开始拖动页面时触发 | 禁用其他交互控件4。 |
end | 拖动结束时触发 | 恢复交互状态4。 |
事件绑定示例
$('#flipbook').turn({
when: {
turned: function(e, page) {
console.log('当前页码:', page);
$('#current-page').text(page);
},
turning: function(e, page, view) {
// 预加载逻辑
}
}
});
6. 动态加载与页面管理
动态添加页面
// 添加新页面到第5页
var newPage = $('<div class="page">动态内容</div>');
$('#flipbook').turn('addPage', newPage, 5);
异步加载内容
$.get('data/chapter2.json', function(data) {
data.pages.forEach(function(page) {
var pageElement = $('<div class="page">' + page.content + '</div>');
$('#flipbook').turn('addPage', pageElement);
});
});
7. 兼容性与性能优化
兼容 IE8
引入 turn.html4.js
并添加条件注释:
<!--[if lt IE 9]>
<script src="path/to/turn.html4.js"></script>
<![endif]-->
性能优化建议
-
减少 DOM 元素:仅保留当前可见页及相邻页4。
-
图片压缩:使用低分辨率图片提升加载速度2。
-
硬件加速:确保
acceleration: true
3。
8. 常见问题与解决方案
翻页动画卡顿
-
原因:页面元素过多或图片过大。
-
解决:优化 DOM 结构,使用
requestAnimationFrame
控制动画24。
翻页方向异常
-
原因:CSS 或参数冲突。
-
解决:检查
direction
参数及容器元素的direction
CSS 属性6。
9. 完整示例代码
<!DOCTYPE html>
<html>
<head>
<title>Turn.js 示例</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="node_modules/turn.js/dist/turn.min.js"></script>
<style>
#flipbook {
width: 800px;
height: 600px;
margin: 20px auto;
}
.page {
background: #fff;
padding: 20px;
}
</style>
</head>
<body>
<div id="flipbook">
<div class="hard">封面</div>
<div class="page">第1页内容</div>
<div class="page">第2页内容</div>
<div class="hard">封底</div>
</div>
<script>
$(document).ready(function() {
$('#flipbook').turn({
width: 800,
height: 600,
autoCenter: true,
when: {
turned: function(e, page) {
console.log('当前页:', page);
}
}
});
});
</script>
</body>
</html>