小说项目增添了内容左右滑动需求,于是用了 uni-app 内置的 swiper 来做左右滑动

HTML代码:

 <view class="content-text" id="box" :style="{fontSize: fontSize + 'px'}" v-if="topRight"><view id="data"><rich-text :nodes="contentData"></rich-text></view></view><swiper  v-if="topRight":style="{ backgroundColor: novelBgStyle, color: novelColor,fontSize: fontSize + 'px' }" class="swiper1" :duration="500":current = "swiper_index"@animationfinish = 'swiperChange'><swiper-item v-for="(item,index) in sliderContent" :key='index' :item-id="item.id"><view class="swiper-item" v-html="item.text"></view></swiper-item></swiper>

原本是用 v-show 显示隐藏,后来发现时好时坏,于是改用 v-if 。
最上面的 view 盒子是用来测量内容高度的,外面还有一个父盒子是视窗高度,层级显示在最后面。

1.数据填充进第一个盒子后获取内容高度

uni.request({url: this.urls + '/app/bookDetail/content?ids=' + send_id,success: res => {let swiper_title_init = `<h3 style="margin-bottom:20px">${res.data.data[0].title}</h3>`;this.contentData = swiper_title_init + res.data.data[0].content;var box = uni.createSelectorQuery().select('#box');      //获取父盒子高度box.boundingClientRect(data => {this.boxHeight = Math.floor(data.height / 26) * 26;setTimeout(()=>{   // setTimeout后才能获取到填充了内容的盒子高度var text = uni.createSelectorQuery().select('#data');   //获取内容高度text.fields({size:true} , data => {this.textHeight = data.height;let len = Math.ceil(this.textHeight/this.boxHeight); //  内容分成len个视窗(父盒子)的高度// 每个视窗含有的字符个数let throat = Math.ceil((this.boxHeight/this.textHeight)*this.contentData.length);for (let i = 0; i < len ; i++){this.countText(throat,i,send_id);}if(callback){callback();}}).exec();})}).exec()}
});

2.根据获取的高度裁剪内容后填充

countText(throat,index,id){let tempstr = '';let arr = '';let str = this.contentData.charAt(throat);let id_and_index = id+'-'+index;let put_data = {};// 判断截取部分是否是<p></p>标签和<br/>标签 具体自己编写~我的代码还没精简 就发个简单版的if(str == '<') {if(this.contentData.charAt(throat+2) == '>'){tempstr = this.contentData.slice(0, throat+3);arr = this.contentData.split("");arr.splice(0, throat+3);}}this.contentData = arr.join("");  // 截取后删掉原数据被截取部分put_data.text = tempstr;put_data.id = id_and_index;           //这里下面说明this.sliderContent.push(put_data);
}

放入id和index 是这一章内容的id 和 这一章分页截取后的页数,后面会放到 swiper-item 的 item-id 属性当中(:item-id=“item.id”) 就可以在 swiper @change 或者 @animationfinish 的调用中 取到 到时候方便调用记录和返回历史;
推荐用 @animationfinish 监听加载更多,这样看起来不会卡顿。

基本的滑动功能 这里就说完了!

补个坑点:

H5端测试没问题 手机端滑动后 更换章节时 swiper会卡死 数据什么的获取填充都是正常的 但是显示正常,
这时候用 v-if 的好处就出来了

this.topRight = false;      //v-if
this.sliderContent = [];
setTimeout(()=>{this.topRight = true;  //v-if this.sliderPage(id);
})

先用 v-if 销毁 DOM 然后重新创建渲染 必须用 setTimeout 打个时间差,不然不管用,实测!!!这问题找了好久,才找出来。

uni-app 小说滑动阅读功能实现相关推荐

  1. Android 用Groovy实现扇贝阅读APP的自动阅读功能

    动机 最近因为想要英语学习,特下载了「扇贝阅读」App,保证自己抽空能够提升一下自己的英语水平.这个App有一个功能,就是打卡功能,每天成功阅读完两篇英语短文,就能完成每日打卡,并领取一些奖励. 问题 ...

  2. 用IOS手机看小说,阅读器APP怎么选

    由于IOS手机自身不能直接打开epub或者txt格式文件,或者阅读软件使用感较差,会我们的阅读带来不小的困扰.今天我为大家推荐iOS苹果手机上比较好用的3个epub阅读器,用这些阅读器,大家就可以轻松 ...

  3. 基于Android的小说电子书阅读app

    课题功能描述: 一.管理员的功能需求: 1.用户信息管理:管理用户的注册信息: 2.书籍类型:对书籍类型信息的查看和维护: 3.书籍信息:对书籍信息的查看和维护: 4.章节信息:对章节信息的查看和维护 ...

  4. Delphi 10.4.2 轻松实现Android/IOS txt小说电子书阅读器应用APP翻页效果

    Delphi 10.4.2是最新版本的跨平台本机应用开发工具,一套代码可编译到五个操作系统上:iOS.Android.Windows.macOS 和 Linux: 本代码仅仅数十行即可轻松实现Andr ...

  5. 有声小说书屋阅读软件 功能及技术分析

    目录 一.有声小说书屋软件功能 1.界面介绍 2.听书功能 1)点击上册工具栏的  喇叭,可实现听书功能, 2)生成网页,借助 edge浏览器的听书功能 3. 扩展书屋 二.所用技术介绍 1.导入小说 ...

  6. uni app实现WIFI功能(只支持安卓APP)

    uni app实现WIFI功能 一.前言 二.使用 uni-WIFI 三.使用h5+ api 一.前言 最近需要在uniapp上实现WiFi功能,将个人的研究结果记录如下(都只支持安卓APP) 使用 ...

  7. 阅读替换净化规则_阅读app下载_阅读客户端安卓下载-优基地

    软件介绍 阅读app是一款非常好用的手机阅读软件,通过导入书源方式实现了强大的小说换源阅读功能,上千个书源可以快速导入,书源丰富度完爆同类软件.阅读app软件开源,不含任何广告,使用起来非常清爽,赶紧 ...

  8. python +pyqt 小说下载阅读器 转语音合成 ,基于PyQt5生成图形页面(已打成exe可直接下载使用)

    最近在学习python,写了一款简单的小说下载器,基本功能都已经实现,废话不多说 直接上效果 简单说下功能把 1.支持在线阅读,翻页 键盘快捷键上下(阅读) 左右(翻页).可以导出TXT到本地,默认是 ...

  9. 用Mac电脑看小说,阅读器软件怎么选

    大家通常会遇到自己使用的小说阅读器不能在Mac系统上兼容的问题,作为小说爱好者,经过多款测评,选出以下小说阅读器,在"挑剔"的Mac电脑上体验相对较好.这些阅读器支持TXT EPU ...

最新文章

  1. 按钮在执行frame动画的时候怎么响应触发事件?
  2. Html.RenderPartial与Html.RenderAction
  3. 注释,无处不在的注释
  4. Linux crontab命令
  5. 图解 | 什么是缓存系统“三座大山”?
  6. matlab 解相位_光测力学栅线投影技术-相位求解方法
  7. Numpy 模块的使用
  8. shop--6.店铺注册--店铺注册之Service层的实现
  9. ExpandableListView
  10. PS 如何简单的更换图片的背景色
  11. 滑动窗口(java)
  12. OEM JDM ODM OBM的区别
  13. 2018年3大UI设计趋势,你知道吗?
  14. CSS画出半圆,四分之一圆,三角等图形
  15. 服务器强制关机会有什么影响,真相揭秘:强制关机对电脑硬件伤害大吗?
  16. 无界——多元合作的发散思维
  17. oracle tlv,OSPF GR(Graceful Restart,平滑重启)技术
  18. Android调整Bitmap图片大小
  19. antd vue表单验证_ant design vue框架中自定义表单或单个表单框验证
  20. img图片的预览和下载(iframe基本使用),图片转file格式,file文件转base64格式,base64的编码和解码

热门文章

  1. 微信开发HTML5轻游戏中的几个坑
  2. 手机开机linux企鹅,修改linux内核的开机图片(小企鹅)
  3. 【牛客网java练习错题笔记】 --Java基础打卡day002
  4. 计算机丢失explorer,Win7电脑开机不载入explorer.exe的解决方法
  5. Linux系统安装Docker
  6. 魔兽世界私服trinitycore2的架构(6)国际化
  7. 以史为鉴,编程语言,启示录之系统觉醒
  8. 不要总是不停的学技术
  9. win8设置计算机休眠,巧设Win8.1休眠模式让系统不关机的方法
  10. 机器人加锤石如何放技能q_lol机器人怎么勾人 机器人Q技能命中技巧详解