现在市面上大多小说app的阅读页都能实现阅读翻页,让我们来看看这个效果用h5怎么实现
需求: 有一段长字符串 将其按照屏幕容纳字数进行分页,然后用tab页的形式呈现出来
首先初始化项目
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> </body> </html>
计算基本需要的数据(一行多少字 一页多少行)
获取容器的宽度 由于我这里子元素都设置的100% 所以我只需要获取 最外层wrap的宽度
一行有多少字 = 容器宽度/字体大小 取小值 可获取一行最少有多少字
一页的行数 = 容器高度/行高
一页多少字 = 一行多少字*一页的行数
如果内容有分行我们用 p标签隔开 用swiper显示在页面上
直接贴代码 目前实现了字符串分页
还有不足的地方就是 如果内容有换行 这个换行不能正确显示
有待改进
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="https://3.swiper.com.cn/dist/css/swiper.min.css"> </head> <style> body,html{ height: 100%; } body { background: #eee; font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 20px; color:#000; margin: 0; padding: 0; } #wrap{ height: 100%; } .swiper-container { width: 100%; height: 100%; margin: 0px auto; } .swiper-slide { background: #fff; display: -webkit-box; display: -ms-flexbox; display: -webkit-flex; display: flex; flex-direction: column; } .swiper-slide p{ text-indent: 2em; margin-top: 1em; margin-bottom: 1em; line-height: 1.5em; } </style> <body> <div class="wrap" id="wrap"> <div class="swiper-container"> <div class="swiper-wrapper" id="pagewrap"> <div class="swiper-slide">Slide 10</div> </div> </div> </div> </body> <script src="https://3.swiper.com.cn/dist/js/swiper.min.js"></script> <script> const readObj = { title:"标题", content:"PHP原始为Personal Home Page的缩写,已经正式更名为PHP: Hypertext Preprocessor。自20世纪90年代国内互联网\r\n开始发展到现在,互联网信息几乎覆盖了我们日常活动所有知识范畴,并逐渐成为我们生活、学习、工作中必不可少的一部分。据统计,从2003 年开始,我国的网页规模基本保持了翻番的增长速度,并且呈上升趋势。PHP 语言作为当今最热门的网站程序开发语言,它具有成本低、速度快、可移植性好、 内置丰富的函数库等优点,因此被越来越多的企业应用于网站开发中。但随着互联网的不断更新换代,PHP语言也出现了不少问题。根据动态网站要求,PHP语言作为一种语言程序,其专用性逐渐在应用过程中显现,其技术水平的优劣与否将直接影响网站的运行效率。其特点是具有公开的源代码, 在程序设计上与通用型语言,如C语言相似性较高,因此在操作过程中简单易懂,可操作性强。同时,PHP语言具有较高的数据传送处理水平和输出水平,可以广泛应用在Windows系统及各类Web服务器中。如果数据量较大,PHP语言还可以拓宽链接面,与各种数据库相连,缓解数据存储、检索及维护压力。随着技术的发展,PHP 语言搜索引擎还可以量体裁衣,实行个性化服务,如根据客户的喜好进行分类收集储存,极大提高了数据运行效率。对于非常小的项目,PHP是一个十分符合人意的编程语言。 但是对于较大的和更为复杂的项目,PHP 就显出它的薄弱了。所以,针对PHP暴露出的一系列缺点问题,我们应当不断地摸索之后,然后找到某些问题的解决方案。一个开源的语言十分流行是一件好事。希望所有的问题能有一天得到解决,然后我们就将拥有一个开源语言,它既开源,又好用。" } let wrapFontSize = 20 // 默认字体大小 let wrapLineHeight = 1.5*wrapFontSize //默认行高 let wrapWidth = wrap.offsetWidth // 容器宽度 let wrapHeight = wrap.offsetHeight // 容器高度 let lineFontNum = Math.floor(wrapWidth/wrapFontSize) // 行字数 let pageLineNum = Math.floor(wrapHeight/wrapLineHeight) //页行数 let pageFontNum = lineFontNum*pageLineNum let pageNum = Math.ceil(readObj.content.length/pageFontNum) //总页数 console.log(readObj.content.length); let pagehtml = '<div class="swiper-slide"><p>' for(let i = 0;i<pageNum;i++){ let pagefont = readObj.content.substr(i*pageFontNum,pageFontNum) console.log(pagefont) pagehtml = pagehtml + pagefont+'</p></div>' if (i != pageNum-1){ pagehtml = pagehtml+'<div class="swiper-slide"><p>' } } pagewrap.innerHTML = pagehtml var swiper = new Swiper('.swiper-container'); </script> </html>