微信小程序阅读器功能

article/2025/9/22 23:38:29

微信小程序

小说阅读器效果

在这里插入图片描述
基础功能:
上一章,下一章
目录显示全部章节,点击章节页面对应该章节,正序倒序功能
基本样式设置,背景板切换,字号切换,亮度调节
自定义返回按钮j
静态仿照数据,和从数据库中取数据,两种方法,进行渲染页面

新手编码,代码还有很大优化空间,欢迎大家来交流学习。

静态仿照数据源

var readList = [{rid:0,title:'傲慢与偏见',imgtit:'/images/books.jpg',readcon:[{titles:'序章',paging:'p1',titlex:'挈子',txts:'迈阿密热火[微博]主场加时119-109击败达拉斯小牛,替补出场的肖恩-巴蒂尔[微博]灵犀一箭,价值连城,成为本场比赛的最大功臣之一。如果一名球员全场比赛只投中两球,没有篮板没有助攻,他的价值你怎么评价?若是相信数据统计,你可能就会犯下一个大大的错误。本场比赛巴蒂尔仍然以替补身份登场,整个前47分钟,他都没有任何抢镜的表现。然而当比赛进入到决胜时刻,主教练埃里克-斯波尔斯特拉仍然坚决地将"巴神"放在场上。事实证明斯帅的决定是英明的。第四节结束前30秒,热火落后1分握有球权,球毫无悬念地掌握在勒布朗-詹姆斯手中。只见詹姆斯在弧顶慢慢拍着皮球,一边观察着小牛队的防守,德维恩-韦德[微博]、雷-阿伦和巴蒂尔,散落在三分线外,尽量拉开球场空间。波什从禁区内提上来为詹姆斯作掩护,德克-诺维茨基和肖恩-马里昂赶紧换位,严阵以待,准备迎接詹姆斯的强势切入。所有人都认为,这种时刻,詹姆斯会一个加速强行冲击禁区,所以原本底线负责照顾巴蒂尔的文斯-卡特也收缩到禁区线附近准备协防。事后卡特一定会为自己的这个选择懊悔不已,因为就在他向内移动脚步的同时,皮球却朝着相反的方向飞出--巴蒂尔接到詹姆斯传球,第一时间起跳,带着一个稍稍后仰的动作,远射出手,皮球精确制导,穿心而中,热火死里逃生!接下来诺维茨基用后仰跳投扳平比分把比赛拖入加时,但是巴蒂尔没有被比下去。延长期热火一开始就打出7-0取得领先,而小牛刚刚凭借马里昂的罚球稳住阵脚,巴蒂尔就再一次和詹姆斯完成了和第四节如出一辙的配合,只不过两个人的位置发生了变化--詹姆斯是在右路突破时吸引到包夹,而巴蒂尔这一次出现在了左翼三分线外。当巴蒂尔本场第二记三分球命中之后,场上比分已经变成113-105,无论从分差还是气势上,都彻底击溃了小牛残存的最后一丝希望。斯帅曾经说过,谁打首发并不重要,重要的是当比赛进行到最后时刻,谁能够留在场上。斯帅这番话当然有所指,阿伦是一个,巴蒂尔是另一个,正是有了这两位集经验、意识、大心脏于一身的老将保驾护航,三巨头才能走得更远、更顺。'},{titles:'第一章',paging:'p2',titlex:'嗡嗡嗡',txts:'击败达拉斯小牛,替补出场的肖恩-巴蒂尔[微博]灵犀一箭,价值连城,成为本场比赛的最大功臣之一。如果一名球员全场比赛只投中两球,没有篮板没有助攻,他的价值你怎么评价?若是相信数据统计,你可能就会犯下一个大大的错误。本场比赛巴蒂尔仍然以替补身份登场,整个前47分钟,他都没有任何抢镜的表现。然而当比赛进入到决胜时刻,主教练埃里克-斯波尔斯特拉仍然坚决地将"巴神"放在场上。事实证明斯帅的决定是英明的。第四节结束前30秒,热火落后1分握有球权,球毫无悬念地掌握在勒布朗-詹姆斯手中。只见詹姆斯在弧顶慢慢拍着皮球,一边观察着小牛队的防守,德维恩-韦德[微博]、雷-阿伦和巴蒂尔,散落在三分线外,尽量拉开球场空间。波什从禁区内提上来为詹姆斯作掩护,德克-诺维茨基和肖恩-马里昂赶紧换位,严阵以待,准备迎接詹姆斯的强势切入。所有人都认为,这种时刻,詹姆斯会一个加速强行冲击禁区,所以原本底线负责照顾巴蒂尔的文斯-卡特也收缩到禁区线附近准备协防。事后卡特一定会为自己的这个选择懊悔不已,因为就在他向内移动脚步的同时,皮球却朝着相反的方向飞出--巴蒂尔接到詹姆斯传球,第一时间起跳,带着一个稍稍后仰的动作,远射出手,皮球精确制导,穿心而中,热火死里逃生!接下来诺维茨基用后仰跳投扳平比分把比赛拖入加时,但是巴蒂尔没有被比下去。延长期热火一开始就打出7-0取得领先,而小牛刚刚凭借马里昂的罚球稳住阵脚,巴蒂尔就再一次和詹姆斯完成了和第四节如出一辙的配合,只不过两个人的位置发生了变化--詹姆斯是在右路突破时吸引到包夹,而巴蒂尔这一次出现在了左翼三分线外。当巴蒂尔本场第二记三分球命中之后,场上比分已经变成113-105,无论从分差还是气势上,都彻底击溃了小牛残存的最后一丝希望。斯帅曾经说过,谁打首发并不重要,重要的是当比赛进行到最后时刻,谁能够留在场上。斯帅这番话当然有所指,阿伦是一个,巴蒂尔是另一个,正是有了这两位集经验、意识、大心脏于一身的老将保驾护航,三巨头才能走得更远、更顺。'},{titles:'第二章',paging:'p3',titlex:'咻咻咻',txts:'替补出场的肖恩-巴蒂尔[微博]灵犀一箭,价值连城,成为本场比赛的最大功臣之一。如果一名球员全场比赛只投中两球,没有篮板没有助攻,他的价值你怎么评价?若是相信数据统计,你可能就会犯下一个大大的错误。本场比赛巴蒂尔仍然以替补身份登场,整个前47分钟,他都没有任何抢镜的表现。然而当比赛进入到决胜时刻,主教练埃里克-斯波尔斯特拉仍然坚决地将"巴神"放在场上。事实证明斯帅的决定是英明的。第四节结束前30秒,热火落后1分握有球权,球毫无悬念地掌握在勒布朗-詹姆斯手中。只见詹姆斯在弧顶慢慢拍着皮球,一边观察着小牛队的防守,德维恩-韦德[微博]、雷-阿伦和巴蒂尔,散落在三分线外,尽量拉开球场空间。波什从禁区内提上来为詹姆斯作掩护,德克-诺维茨基和肖恩-马里昂赶紧换位,严阵以待,准备迎接詹姆斯的强势切入。所有人都认为,这种时刻,詹姆斯会一个加速强行冲击禁区,所以原本底线负责照顾巴蒂尔的文斯-卡特也收缩到禁区线附近准备协防。事后卡特一定会为自己的这个选择懊悔不已,因为就在他向内移动脚步的同时,皮球却朝着相反的方向飞出--巴蒂尔接到詹姆斯传球,第一时间起跳,带着一个稍稍后仰的动作,远射出手,皮球精确制导,穿心而中,热火死里逃生!接下来诺维茨基用后仰跳投扳平比分把比赛拖入加时,但是巴蒂尔没有被比下去。延长期热火一开始就打出7-0取得领先,而小牛刚刚凭借马里昂的罚球稳住阵脚,巴蒂尔就再一次和詹姆斯完成了和第四节如出一辙的配合,只不过两个人的位置发生了变化--詹姆斯是在右路突破时吸引到包夹,而巴蒂尔这一次出现在了左翼三分线外。当巴蒂尔本场第二记三分球命中之后,场上比分已经变成113-105,无论从分差还是气势上,都彻底击溃了小牛残存的最后一丝希望。斯帅曾经说过,谁打首发并不重要,重要的是当比赛进行到最后时刻,谁能够留在场上。斯帅这番话当然有所指,阿伦是一个,巴蒂尔是另一个,正是有了这两位集经验、意识、大心脏于一身的老将保驾护航,三巨头才能走得更远、更顺。'},]},{rid:1,title:'一念永恒',imgtit:'/images/dongman.jpg',readcon:[{titles:'第一章',paging:'p1',titlex:'嘻嘻嘻',txts:'新浪体育讯 迈阿密热火[微博]主场加时119-109击败达拉斯小牛,替补出场的肖恩-巴蒂尔[微博]灵犀一箭,价值连城,成为本场比赛的最大功臣之一。如果一名球员全场比赛只投中两球,没有篮板没有助攻,他的价值你怎么评价?若是相信数据统计,你可能就会犯下一个大大的错误。本场比赛巴蒂尔仍然以替补身份登场,整个前47分钟,他都没有任何抢镜的表现。然而当比赛进入到决胜时刻,主教练埃里克-斯波尔斯特拉仍然坚决地将"巴神"放在场上。事实证明斯帅的决定是英明的。第四节结束前30秒,热火落后1分握有球权,球毫无悬念地掌握在勒布朗-詹姆斯手中。只见詹姆斯在弧顶慢慢拍着皮球,一边观察着小牛队的防守,德维恩-韦德[微博]、雷-阿伦和巴蒂尔,散落在三分线外,尽量拉开球场空间。波什从禁区内提上来为詹姆斯作掩护,德克-诺维茨基和肖恩-马里昂赶紧换位,严阵以待,准备迎接詹姆斯的强势切入。所有人都认为,这种时刻,詹姆斯会一个加速强行冲击禁区,所以原本底线负责照顾巴蒂尔的文斯-卡特也收缩到禁区线附近准备协防。事后卡特一定会为自己的这个选择懊悔不已,因为就在他向内移动脚步的同时,皮球却朝着相反的方向飞出--巴蒂尔接到詹姆斯传球,第一时间起跳,带着一个稍稍后仰的动作,远射出手,皮球精确制导,穿心而中,热火死里逃生!接下来诺维茨基用后仰跳投扳平比分把比赛拖入加时,但是巴蒂尔没有被比下去。延长期热火一开始就打出7-0取得领先,而小牛刚刚凭借马里昂的罚球稳住阵脚,巴蒂尔就再一次和詹姆斯完成了和第四节如出一辙的配合,只不过两个人的位置发生了变化--詹姆斯是在右路突破时吸引到包夹,而巴蒂尔这一次出现在了左翼三分线外。当巴蒂尔本场第二记三分球命中之后,场上比分已经变成113-105,无论从分差还是气势上,都彻底击溃了小牛残存的最后一丝希望。斯帅曾经说过,谁打首发并不重要,重要的是当比赛进行到最后时刻,谁能够留在场上。斯帅这番话当然有所指,阿伦是一个,巴蒂尔是另一个,正是有了这两位集经验、意识、大心脏于一身的老将保驾护航,三巨头才能走得更远、更顺。'}]},{rid:2,title:'一念永恒',imgtit:'/images/dongman.jpg',readcon:[{titles:'第一章',paging:'p1',titlex:'哈哈哈',txts:'新浪体育讯 迈阿密热火[微博]主场加时119-109击败达拉斯小牛,替补出场的肖恩-巴蒂尔[微博]灵犀一箭,价值连城,成为本场比赛的最大功臣之一。如果一名球员全场比赛只投中两球,没有篮板没有助攻,他的价值你怎么评价?若是相信数据统计,你可能就会犯下一个大大的错误。本场比赛巴蒂尔仍然以替补身份登场,整个前47分钟,他都没有任何抢镜的表现。然而当比赛进入到决胜时刻,主教练埃里克-斯波尔斯特拉仍然坚决地将"巴神"放在场上。事实证明斯帅的决定是英明的。第四节结束前30秒,热火落后1分握有球权,球毫无悬念地掌握在勒布朗-詹姆斯手中。只见詹姆斯在弧顶慢慢拍着皮球,一边观察着小牛队的防守,德维恩-韦德[微博]、雷-阿伦和巴蒂尔,散落在三分线外,尽量拉开球场空间。波什从禁区内提上来为詹姆斯作掩护,德克-诺维茨基和肖恩-马里昂赶紧换位,严阵以待,准备迎接詹姆斯的强势切入。所有人都认为,这种时刻,詹姆斯会一个加速强行冲击禁区,所以原本底线负责照顾巴蒂尔的文斯-卡特也收缩到禁区线附近准备协防。事后卡特一定会为自己的这个选择懊悔不已,因为就在他向内移动脚步的同时,皮球却朝着相反的方向飞出--巴蒂尔接到詹姆斯传球,第一时间起跳,带着一个稍稍后仰的动作,远射出手,皮球精确制导,穿心而中,热火死里逃生!接下来诺维茨基用后仰跳投扳平比分把比赛拖入加时,但是巴蒂尔没有被比下去。延长期热火一开始就打出7-0取得领先,而小牛刚刚凭借马里昂的罚球稳住阵脚,巴蒂尔就再一次和詹姆斯完成了和第四节如出一辙的配合,只不过两个人的位置发生了变化--詹姆斯是在右路突破时吸引到包夹,而巴蒂尔这一次出现在了左翼三分线外。当巴蒂尔本场第二记三分球命中之后,场上比分已经变成113-105,无论从分差还是气势上,都彻底击溃了小牛残存的最后一丝希望。斯帅曾经说过,谁打首发并不重要,重要的是当比赛进行到最后时刻,谁能够留在场上。斯帅这番话当然有所指,阿伦是一个,巴蒂尔是另一个,正是有了这两位集经验、意识、大心脏于一身的老将保驾护航,三巨头才能走得更远、更顺。'}]},
]function getReadList() {return readList;
}function getReadsListByIndex(indexList){var readsNewList = [];for(let i=0; i<indexList.length; i++){var index = indexList[i].index;var reads = readList[index];readsNewList.push(reads); }return readsNewList;
}module.exports = {getReadList: getReadList,getReadsListByIndex: getReadsListByIndex
}

书架页面

<!--pages/read/index.wxml-->
<view class="read"><view class="read_box"><block wx:for="{{readListShow}}" wx:key="this"><navigator url="/pages/readtxt/index" hover-class='none' bindtap="booktap"  data-id="{{index}}"><view class="read_con" hover-class="read_con_active"><image src="{{item.images}}" mode="aspectFit"></image><view class="read_con_item">{{item.title}}</view></view></navigator></block></view>
</view>

JS

//read
const readsData = require("../../utils/data.js")Page({data: {readListShow:[],readconList:[],readList:[]},booktap:function(e){var index = e.currentTarget.dataset.id;var bookTap = this.data.readListShow[index].rid;var readListsync = wx.getStorageSync("readListsync")||[];readListsync.push({index:index,rid:bookTap})for(let i =0 ; i<readListsync.length; i++){for(let j =i+1; j<readListsync.length; j++){if(readListsync[i].rid === readListsync[j].rid){readListsync.splice(j,1);wx.setStorageSync('readListsync', readListsync);}}}wx.setStorageSync('readListsync', readListsync);  },/* 静态数据方法booktap:function(e){var index = e.currentTarget.dataset.id;var bookTap = this.data.readListShow[index].detail.rid;var readListsync = wx.getStorageSync("readListsync")||[];readListsync.push({index:index,rid:bookTap})for(let i =0 ; i<readListsync.length; i++){for(let j =i+1; j<readListsync.length; j++){if(readListsync[i].rid === readListsync[j].rid){readListsync.splice(j,1);wx.setStorageSync('readListsync', readListsync);}}}wx.setStorageSync('readListsync', readListsync);  },*/onLoad: function (options) {wx.cloud.database().collection('readList').get().then(res=>{this.setData({readListShow:res.data})}).catch(res=>{})/* 静态数据方法var readsList = readsData.getReadList();var readListShow=[];for(var i=0; i<readsList.length; i++){readListShow.push({ detail:readsList[i] } )}this.setData({readListShow:readListShow})*/},})

阅读页面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

// pages/readtxt/index.js
//const readsData = require("../../utils/data.js")Page({data: {value:0,values:0,readindex:0,txttitle:'',heiye:'夜间',//readtxtListShow: [],readconList: [],tabaritem: false,catalog: false,tapcolor: false,tabarStyle: false,backcolor: '#b88e41',fontcolor: '#000',tmin:'34rpx',tminnum:34,topNum:100,paixu:false},//封装数据getNewreadList(){wx.cloud.database().collection('readList').get().then(res=>{var readListsync = wx.getStorageSync('readListsync')||[];for(let i=0; i<readListsync.length; i++){let index = readListsync[i].index;let reds = res.data[index].readcon;let txttitle= res.data[index].title;this.setData({readconList:reds,txttitle:txttitle})this.ruless();wx.clearStorage(readListsync);}}).catch(res=>{console.log("数据获取失败");})},//加载数据onLoad: function (options) {this.getNewreadList();},onShow: function () {var _this = this;//获取当前显示屏幕亮度wx.getScreenBrightness({success:function(res){_this.setData({values: res.value})}})},//点击章节对应的索引catalogtap(e){var index = e.currentTarget.dataset.id;this.setData({readindex:index,topNum: this.data.topNum = 0})},//排序paixu(e){let paixu = this.data.paixu;let readcolist =  this.data.readconList;let readcolists =  this.data.readconList;readcolist.reverse();if(!paixu){this.setData({readconList:readcolist,paixu:!paixu})}if(paixu){this.setData({readconList:readcolists,paixu:!paixu})}},fanhui(){wx.navigateBack({delta: 1 // 1返回上一个界面,2返回上上个页面})},sliderchange:function(e){var val = e.detail.value;var valScreen= val / 100;wx.setScreenBrightness({value: valScreen,})this.setData({value:e.detail.value})},getScreenBrightness:function(){var values = this.data.values;//设置屏幕亮度wx.setScreenBrightness({value: values,    //屏幕亮度值,范围 0~1,0 最暗,1 最亮})},//监听页面滚动scrolltoupper: function (e) {let scroheight = e.detail.scrollHeight;if (e.detail.scrollTop = scroheight ) {this.setData({tabaritem : false})}},//上一页previous(){let readindex = this.data.readindex;if(readindex > 0){this.setData({readindex:--readindex,topNum: this.data.topNum = 0})}},//下一页next(){let readindex = this.data.readindex;let readconList = this.data.readconList;if(readindex < readconList.length-1){this.setData({readindex:++readindex,topNum: this.data.topNum = 0})}else{wx.showToast({title: '已是最后一章',icon: 'loading',duration: 10000})setTimeout(function(){wx.hideToast()},500)}},//切换颜色backcolor(){wx.setNavigationBarColor({frontColor: '#ffffff', // 必写项backgroundColor: '#f0d49a' // 传递的颜色值})this.setData({backcolor: '#f0d49a',fontcolor: '#000000'})},//切换颜色backcolor1(){wx.setNavigationBarColor({frontColor: '#ffffff', // 必写项backgroundColor: '#f7bb6d', // 传递的颜色值})this.setData({backcolor: '#f7bb6d',fontcolor: '#000000'})},//切换颜色backcolor2(){wx.setNavigationBarColor({frontColor: '#ffffff', // 必写项backgroundColor: '#bdf3bd', // 传递的颜色值})this.setData({backcolor: '#bdf3bd',fontcolor: '#000000'})},//切换颜色backcolor3(){wx.setNavigationBarColor({frontColor: '#ffffff', // 必写项backgroundColor: '#7c7a7a', // 传递的颜色值})this.setData({backcolor: '#7c7a7a',fontcolor: '#ffffff'})},//切换颜色backcolor4(){wx.setNavigationBarColor({frontColor: '#ffffff', // 必写项backgroundColor: '#ffffff', // 传递的颜色值})this.setData({backcolor: '#ffffff',fontcolor: '#000000'})},//调整字号tmin(){var nummin = 24;var tminnum = this.data.tminnum;if(tminnum > nummin){var tmin = tminnum + 'rpx';this.setData({tminnum : tminnum - 2,tmin:tmin})}},//调整字号tmax(){var nummin = 55;var tminnum = this.data.tminnum;if(tminnum < nummin){var tmin = tminnum + 'rpx';this.setData({tminnum : tminnum + 2,tmin:tmin})}},//菜单栏样式状态tabarStyle() {var tabarStyle = !this.data.tabar_style;this.setData({tabarStyle: tabarStyle,tabaritem: false})},stylehide() {this.setData({tabarStyle: false})},tabarshow() {var tabaritem = !this.data.tabaritem;this.setData({tabaritem: tabaritem,catalog: false,tabarStyle: false})},//目录的状态catalogshow() {var catalog = !this.data.catalog;this.setData({catalog: catalog,tabaritem: false})},cataloghide() {this.setData({catalog: false})},//夜间模式tapcolor() {var that = this;var tapcolor = !this.data.tapcolor;this.setData({tapcolor: tapcolor,})if (this.data.tapcolor == true) {wx.setNavigationBarColor({frontColor: '#ffffff', // 必写项backgroundColor: '#303030', // 传递的颜色值/*animation: { // 可选项,加上这项会有个显示的动画效果duration: 100,timingFunc: 'easeIn'}*/})that.setData({backcolor: '#303030',fontcolor: '#ffffff',heiye:'白天'})}if (this.data.tapcolor == false) {wx.setNavigationBarColor({frontColor: '#ffffff', // 必写项backgroundColor: '#b88e41', // 传递的颜色值})that.setData({backcolor: '#b88e41',fontcolor: '#000',heiye:'夜间'})}},/**规则 */ruless() {var aa = /。/g;var readLists = this.data.readconList;for (var i = 0; i < readLists.length; i++) {var readcons = readLists[i].texts;var ss = readcons.replace(aa, "。 \n ");readcons = ss;var asx = "readconList[" + i + "].texts";this.setData({[asx]: readcons,})}}/**数据导入 *//* 静态数据方法getNewPage: function () {var readIndexList = wx.getStorageSync("readListsync");var readListsync = readsData.getReadsListByIndex(readIndexList);var readtxtListShow = [];for (let i = 0; i < readListsync.length; i++) {readtxtListShow.push({detail: readListsync[i],})}this.setData({ readtxtListShow: readtxtListShow })wx.clearStorage(readListsync);},getNewconList: function () {var readconList = [];var readtxtListShow = this.data.readtxtListShow[0].detail.readcon;var txttitle = '';var readtxttit = this.data.readtxtListShow[0].detail.title;txttitle = readtxttit;readconList.push({ detail: readtxtListShow })this.setData({readconList: readconList,txttitle:txttitle})},静态正则rules() {var aa = /。/g;var readLists = this.data.readtxtListShow;for (var i = 0; i < readLists.length; i++) {var readcons = this.data.readtxtListShow[i].detail.readcon;for (var j = 0; j < readcons.length; j++) {var as = this.data.readtxtListShow[i].detail.readcon[j].txts;var ss = as.replace(aa, "。 \n \t\t");as = ss;var asx = "readtxtListShow[" + i + "].detail.readcon[" + j + "].txts";this.setData({[asx]: as,})}}}, */})
<!--pages/readtxt/index.wxml--><view class="readtxtbox" style="background-color: {{backcolor}}; color:{{fontcolor}}; font-size:{{tmin}};"><view class="top" style="background-color: {{backcolor}};"></view><scroll-view class="readbox" scroll-y='true' catchtap="tabarshow" scroll-top='{{topNum}}' enhanced='true' show-scrollbar='false' scroll-anchoring='true' bindscroll='scrolltoupper'> <view class="titex">{{readconList[readindex].chapter}} {{readconList[readindex].chapterx}}</view><view class="readtxt"><text space="emsp">{{readconList[readindex].texts}}</text></view></scroll-view><view class="tabar font_sizebf" wx:if="{{tabaritem}}"><view class="tabar_item"><view class="tr_im_con" catchtap="previous">上一页</view><view class="tr_im_con" catchtap="next">下一页</view></view><view class="tabar_item1"><view class="item1_left" catchtap="catalogshow"><image src="/icons/mulu.png"></image><view>目录</view></view><view class="item1_con" catchtap="tapcolor"><image src="/icons/heiye_{{tapcolor?0:1}}.png"></image><view>{{heiye}}</view></view><view class="item1_right" catchtap="tabarStyle"><image src="/icons/stylecolor.png"></image><view>样式</view></view></view></view><view class="catalog font_sizebf" wx:if="{{catalog}}" catchtap="cataloghide"><view class="catalog_left"><view class="catalog_top"><view>{{txttitle}}</view><view catchtap="paixu">排序<image src="/icons/paixu.png"></image></view></view><block wx:for="{{readconList}}" wx:key="this"><view class="catalog_con" bindtap="catalogtap" data-id="{{index}}"><view class="c_c_t">{{item.chapter}}</view><view class="c_c_c">{{item.chapterx}}</view></view></block></view><view class="catalog_right" ></view></view><view class="tabarStyle font_sizebf" wx:if="{{tabarStyle}}"><view class="tabarboxhid" catchtap="stylehide"></view><view class="tabarbox"><view style="height:50rpx;"></view><view class="t_style">亮度<view class="t_speed"><slider bindchanging="sliderchange" bindchange="sliderchange" value="{{value}}" activeColor="#ffffff" block-size="20"/></view><view class="t_system" bindtap="getScreenBrightness">默认</view></view><view class="t_style">字号<view class="t_m" hover-class="t_m_active" catchtap="tmin"></view><view class="t_m" hover-class="t_m_active" catchtap="tmax"></view></view><view class="t_style">背景<view class="t_backcon" hover-class="t_backcon_active" catchtap="backcolor"></view><view class="t_backcon1" hover-class="t_backcon_active" catchtap="backcolor1"></view><view class="t_backcon2" hover-class="t_backcon_active" catchtap="backcolor2"></view><view class="t_backcon3" hover-class="t_backcon_active" catchtap="backcolor3"></view><view class="t_backcon4" hover-class="t_backcon_active" catchtap="backcolor4"></view></view></view></view><view class="fanhui" wx:if="{{tabaritem}}" catchtap="fanhui"><image src="/icons/fanhui.png"></image></view></view>

http://chatgpt.dhexx.cn/article/l5idnyDB.shtml

相关文章

基于微信小程序的小说阅读系统(小程序+Nodejs)

目录 摘要 1 1 前言 3 1.1 项目介绍 3 1.2 项目背景 3 2 微书书城系统分析 3 2.1 需求分析 3 2.2 功能分析 3 2.3 系统用例图设计 3 2.4 系统流程图设计 3 2.5 系统开发环境 3 3 数据库分析与设计 4 3.1 数据库分析 4 3.2 数据库概念设计 4 3.3 数据逻辑结构设计 4 3.4 各表之间…

微信读书产品分析报告(附:信息结构图、功能结构图、产品结构图)

一、产品信息 产品名称&#xff1a;微信读书 产品类型&#xff1a;社交阅读 标语&#xff1a;让阅读不再孤单 产品版本&#xff1a;4.6.5 产品定位&#xff1a;在提供极致阅读体验的同时&#xff0c;为用户推荐合适的书籍&#xff0c;并可查看微信好友的读书动态、与好友讨论正…

【产品分析】从用户体验五要素分析——微信读书

本文从用户体验五要素&#xff1a;表现层面、框架层 、战略层、范围层、结构层&#xff0c;对微信读书进行了分析。 前言 互联网发展的速度也加速了知识更新的速度&#xff0c;也许今天你还手握焦点技能&#xff0c;明天就可能被遗忘在角落。一应俱全的网课、铺天盖地的资讯加…

tensorflow: greater()

tf.greater(x, y, nameNone) 返回&#xff1a;&#xff08;x > y&#xff09;的bool类型的张量 x: 一个张量。且必须是下列类型&#xff1a; types: float32, float64, int32, int64, uint8, int16, int8,uint16. y: 一个张量。且必须是与x类型一样。 name: 节点的操作…

G Greater and Greater

G Greater and Greater Description Given a sequence A of size n{n}n and a sequence B of size m, determine the number of subintervals(called S) of size m in A satisfying ∀i∈{1,2,⋯,m},Si≥Bi​. Input The first line contains two integers n,m (1≤n≤150000,1…

C++ greater/less 和建堆

文章目录 STL中的greater<>()和less<>()Heap定义堆排序构建堆堆排序 C的STL中堆的实现 STL中的greater<>()和less<>() 两个函数的头文件为 排序的时候&#xff0c;默认是从小到大&#xff1b;从大到小排序要使第三个参数为greater()。 建堆的时候&…

Greater and Greater

题目 传送门 题目大意 给定大小为n的序列A和大小为m的序列B&#xff0c;计算A中所有大小为m的子区间S&#xff0c;满足 分析 本题使用了一个special的STL&#xff1a;bitset 考虑bitset&#xff0c;对每个A求一个长为m的bitset Si&#xff0c;其中Si[j]1当且仅当Ai≥Bj。…

Error: Microsoft Visual C++ 14.0 or greater is required 解决方法

在Windows上安装某些Python依赖包时经常会遇到如下错误&#xff0c;其原因是&#xff1a;安装包&#xff08;此处是box2d-py&#xff09;没有找到Microsoft Visual C 14.0或更高版本的运行环境&#xff0c;所以无法正常启动。 error: subprocess-exited-with-error....Running…

什么是MVP模式?

MVP&#xff08;Model-View-Presenter&#xff09;是MVC模式的改良&#xff0c;由IBM的子公司Taligent提出。 和MVC的相同之处在于&#xff1a;Controller/Presenter负责业务逻辑&#xff0c;Model管理数据&#xff0c;View负责显示。 1.各部分之间的通信,都是双向的. View &l…

理解MVP设计模式

版权声明&#xff1a;转载请注明本文出自远古大钟的博客&#xff08;http://blog.csdn.net/duo2005duo&#xff09;&#xff0c;谢谢支持&#xff01; 目录(?)[] 转载请注明本文出自远古大钟的博客&#xff08;http://blog.csdn.net/duo2005duo&#xff09;&#xff0c;谢谢支…

iOS-MVP模式

前言 最近一段时间&#xff0c;公司刚做完一个MVP项目&#xff0c;我有一个习惯&#xff1a;在项目结项之后总结一下项目中新接触的问题。Google一下关键字“iOS MVP”&#xff0c;发现一些文章&#xff0c;最后是 这篇文章 带给我对MVP 的一些认识。MVP似乎有好多的变种&#…

Android:安卓学习笔记之MVP模式的简单理解和使用

Android MVP模式的简单理解和使用 MVP模式1、 为什么使用MVP模式&#xff1f;1.1、实例说明 2、一步步让你理解MVP2.1、MVP实现第一步&#xff0c; 将页面拆分为M/V/P三个模块2.2、 MVP实现第2步&#xff0c; 使用接口通信&#xff0c;进一步解耦2.2.1、MVP遵从的面向对象原则 …

MVP开发模式解析

前言 由于项目里同事用到MVP开发模式&#xff0c;我看了几篇关于 MVP 的文章&#xff0c;对其有了基本的了解之后&#xff0c;便照猫画虎进行了开发&#xff0c;之后便再也没接触过 MVP。 最近空闲读了些MVP的文章&#xff0c;受益匪浅&#xff0c;于是打算写一篇关于MVP开发…

MVP模式的优缺点

MVP模式是MVC的一个演化版本&#xff0c;全称是Model view Presenter。 MVP能够有效的降低View的复杂性&#xff0c;避免业务逻辑被塞进View中,使得View变成一个混乱的“大泥坑”。 MVP模式会解除View与Model的耦合&#xff0c;同时又带来了良好的可扩展性&#xff0c;可测试…

Android MVP开发模式 google 官方Mvp架构详解(转)

Google官方MVP Sample代码解读 关于Android程序的构架, 当前最流行的模式即为MVP模式, Google官方提供了Sample代码来展示这种模式的用法.Repo地址: android-architecture.本文为阅读官方sample代码的阅读笔记和分析. 官方Android Architecture Blueprints [beta]:Android在如…

MVP模式的相关知识

MVP 是从经典的模式MVC演变而来&#xff0c;它们的基本思想有相通的地方&#xff1a;Controller/Presenter负责逻辑的处理&#xff0c;Model提供数据&#xff0c;View负责显示。作为一种新的模式&#xff0c;MVP与MVC有着一个重大的区别&#xff1a;在MVP中View并不直接使用Mod…

【iOS】MVP模式

文章目录 什么是MVP模式&#xff1f;图解 从MVC到MVP苹果的MVC为何要从MVC到MVP?MVP MVP模式下的工程MVP模式的优缺点 什么是MVP模式&#xff1f; MVP模式是MVC模式的一个演化版本&#xff0c;MVP全称Model-View-Presenter。&#xff08;关于MVC模式可见这篇文章&#xff09; …

浅谈安卓中的MVP模式

端午放假&#xff0c;天气下雨&#xff0c;于是乎在家撸一下博客&#xff0c;本篇博客将为大家解析MVP模式在安卓中的应用。 本文将从以下几个方面对MVP模式进行讲解&#xff1a; 1. MVP简介 2. 为什么使用MVP模式 3. MVP模式实例 4. MVP中的内存泄露问题 1. MVP简介&…

Android MVP模式 入门

1.前言 近些年来&#xff0c;Android架构模式有很多&#xff0c;我们比较熟知的有MVC&#xff0c;MVP以及MVVM&#xff0c;目前Android市场中使用最多的应该是MVP架构&#xff0c;虽然MVVM结合DataBing看似更加方便&#xff0c;但在一般公司中使用的还是比较少。其实模式这种东…

MVP模式实例解释

为什么在UI层包含太多的逻辑是很糟糕的&#xff1f;在既不手动运行应用程序&#xff0c;也不维护丑陋的自动执行UI组件的UI运行者脚本(runner script)的情况下&#xff0c;位于应用程序UI层中的代码是非常难于调试的。虽然这本身就是一个很大的问题&#xff0c;一个更大的问题是…