html仿今日头条下拉刷新,小程序 仿今日头条 带滑动切换的文章列表
小程序 仿今日头条 带滑动切换的文章列表
发布时间:2018-07-19 09:41,
浏览次数:353
拿别人仿今日头条的代码做的改版,
首先感谢前辈。其次,这个代码虽然能用,但是js里还是存在一些BUG。希望后辈再做改版。
wxml:
scroll-x="true" scroll-left="{{scrollNavbarLeft}}">
wx:for="{{navbarShowIndexArray}}" catchtap="onTapNavbar"
data-itemid="{{navbarArray[item].id}}">
class="navbar-item-wrap">{{navbarArray[item].title}}
bindtouchstart="onTouchstartArticles" bindtouchend="onTouchendArticles"
hidden="{{articlesHide}}" bindscrolltolower="loadMore" scroll-y="{{true}}"
style='height: 300px;'>
wx:if="{{mpList !== ''}}">
src='{{item.avatar}}'>
src='../images/vip.png'>
class='name'>{{item.name}}
{{item.industry}}{{item.introduce}}
src='../images/loading.gif'>
正在加载更多数据
wx:if="{{mpList == ''}}">
暂无数据
wxss:
/* 今日头条 */ .navbar { position: fixed; top: 0; z-index: 4; border-bottom: 1px
solid #ececec; height: 80rpx; font-size: 16px; white-space: nowrap;
background-color: #f5f6f7; } .navbar-item { display: inline-block; width:
calc(750rpx / 5); height: 100%; } .navbar-item-active { color: #3bc6da;
box-sizing: border-box; } .navbar-item-wrap { display: flex; width: 100%;
height: 100%; align-items: center; justify-content: center; } .loading-modal {
display: flex; position: fixed; z-index: 3; width: 100%; height: 100%;
background-color: #fff; align-items: center; justify-content: center; }
.loading-text-wrap { padding-bottom: 200rpx; } .loading-text { font-size: 50px;
color: #cfcfcf; } .articles { margin-top: 80rpx; min-height: calc(100% -
80rpx); } .article { display: flex; border-bottom: 1px solid #ececec; height:
80px; align-items: center; justify-content: center; } .nodatas{ width: 750rpx;
text-align: center; background: #fff; font-size: 24rpx; line-height: 40rpx;
color: #999; padding: 100rpx 0; } .nodatas image{ width: 200rpx; height:
140rpx; margin:60rpx auto; }
js是重点。有很多bug,希望后面用的代码的做一些改版。所以我把js全部贴出来,不止有滑动切换点击切换。还有我
上面自己加的上拉加载下拉刷新。scroll-view 不支持上拉下拉。所以用了其他方式实现。代码能用,但是我自己不太满意。
大家看着删吧。
var app = getApp(); Page({ data: { userInfo: {}, hasUserInfo: false, canIUse:
wx.canIUse('button.open-type.getUserInfo'), itemid:'', currentItems: '',
listlenth: '', withss:'', //今日头条 navbarArray: [], navbarShowIndexArray:
Array.from(Array(12).keys()), navbarHideIndexArray: [], windowWidth: 375,
scrollNavbarLeft:0, currentChannelIndex: 0, startTouchs: { x: 0, y: 0 },
channelSettingModalHide: true, articlesHide: false, articleContent: '',
loadingModalHide: false, temporaryArray: Array.from(new Array(11), (val, index)
=> index + 1), page:2, loadings: false, loadingsbg:true, }, //事件处理函数
onLoad:function(){ var that = this; //获取内容 wx.request({ url: app.config.apiUrl
+ 'Api/Information/getInformation', method: 'POST', header: { 'content-type':
'application/json' }, data: { cmd: 'get_informations', page: 1, per_page: 10,
category: 1 }, success: function (res) { if (res.data.code == 0) {
that.setData({ navbarArray: res.data.data.cate_data, mpList:
res.data.data.information_data, currentItems: res.data.data.cate_data[0].id,
itemid: res.data.data.cate_data[0].id, listlenth:
res.data.data.cate_data.length, withss: 150 * res.data.data.cate_data.length,
navbarShowIndexArray: Array.from(Array(res.data.data.cate_data.length +
1).keys()), }) } } }); }, // 今日tt onPullDownRefresh: function () {
wx.stopPullDownRefresh(); }, //点击nav时候切换页面 onTapNavbar: function (e) { var that
= this; this.switchChannel(parseInt(e.currentTarget.id)); var itemid =
e.currentTarget.dataset.itemid; var itemids = e.currentTarget.dataset.itemids;
that.setData({ itemid: itemid, currentItems: itemid }) }, switchChannel:
function (targetChannelIndex) { this.getArticles(targetChannelIndex); let
navbarArray = this.data.navbarArray; navbarArray.forEach((item, index, array)
=> { item.type = ''; }); this.setData({ navbarArray: navbarArray,
currentChannelIndex: targetChannelIndex }); }, getArticles: function (index) {
var that = this; var itemid = that.data.navbarArray[index].id; that.setData({
loadingModalHide: false, articleContent: '', currentItems: itemid, });
that.setData({ scrollTop: 0 }) //再调用接口改变main的值 wx.request({ url:
app.config.apiUrl + 'Api/Information/getInformation', method: 'POST', header: {
'content-type': 'application/json' }, data: { cmd: 'get_informations', page: 1,
per_page: 10, category_id: that.data.currentItems, }, success: function (res) {
if (res.data.code == 0) { that.setData({ mpList:
res.data.data.information_data, page: 2 }) } } }); }, //滑动main模块切换页面
onTouchstartArticles: function (e) { var that = this that.setData({
'startTouchs.x': e.changedTouches[0].clientX, 'startTouchs.y':
e.changedTouches[0].clientY, }); }, onTouchendArticles: function (e) { var that
= this; var diyi = that.data.item; var listlenth = that.data.listlenth; var
geshu = that.data.geshu; var navbarArray = this.data.currentChannelIndex let
deltaX = e.changedTouches[0].clientX - this.data.startTouchs.x; let deltaY =
e.changedTouches[0].clientY - this.data.startTouchs.y; var itemids =
e.currentTarget.dataset.itemids; if (deltaX > 60 || deltaX
scrollTop: 0, }); } if (deltaX < 0 && navbarArray > 3) { that.setData({
scrollNavbarLeft: 80 }); } else if (deltaX > 0 && navbarArray < 5) {
that.setData({ scrollNavbarLeft: 0 }); } else if (deltaX > 0 && navbarArray >
5) { that.setData({ scrollNavbarLeft: 80 * navbarArray }); } else {
that.setData({ scrollNavbarLeft: -80 * navbarArray }); } if (Math.abs(deltaX) >
Math.abs(deltaY) && Math.abs(deltaX) > listlenth) { let deltaNavbarIndex =
deltaX > 0 ? -1 : 1; let currentChannelIndex = this.data.currentChannelIndex;
let navbarShowIndexArray = this.data.navbarShowIndexArray; let
targetChannelIndexOfNavbarShowIndexArray =
navbarShowIndexArray.indexOf(currentChannelIndex) + deltaNavbarIndex; let
navbarShowIndexArrayLength = listlenth; if
(targetChannelIndexOfNavbarShowIndexArray >= 0 &&
targetChannelIndexOfNavbarShowIndexArray <= navbarShowIndexArrayLength - 1) {
let targetChannelIndex =
navbarShowIndexArray[targetChannelIndexOfNavbarShowIndexArray]; if
(navbarShowIndexArrayLength > listlenth) { let scrollNavbarLeft; if
(targetChannelIndexOfNavbarShowIndexArray < listlenth-1) { scrollNavbarLeft =
0; } else if (targetChannelIndexOfNavbarShowIndexArray ===
navbarShowIndexArrayLength - 1) { scrollNavbarLeft = this.rpx2px(110 *
(navbarShowIndexArrayLength - listlenth)); } else { scrollNavbarLeft =
this.rpx2px(110 * (targetChannelIndexOfNavbarShowIndexArray - listlenth-1)); }
this.setData({ scrollNavbarLeft: scrollNavbarLeft, }); }
this.switchChannel(targetChannelIndex); } } }, rpx2px: function (rpx) { return
this.data.windowWidth * rpx / 750; }, storeNavbarShowIndexArray: function (){
wx.setStorage({ key: 'navbarShowIndexArray', data:
this.data.navbarShowIndexArray }); }, //今日头条结束 //上拉事件 loadMore:function(e) { //
触底加载更多 var that = this that.setData({ loadings: true, }) setTimeout(function(){
//加载中 that.setData({ loadings: false, loadingsbg: false, }) // 页数 var page =
that.data.page; wx.request({ url: app.config.apiUrl +
'Api/Information/getInformations', method: 'POST', header: { 'content-type':
'application/json' }, data: { cmd: 'get_informations', page: page, per_page:
10, category_id: that.data.currentItems, }, success: function (res) { if
(res.data.code == 0) { var mpList =
that.data.mpList.concat(res.data.data.information_data) that.setData({ mpList:
mpList, page: page+1, loadings: false, loadingsbg: false, }) } } }); },1500) },
//上拉事件end onShareAppMessage: function () {} })
有什么不懂的,我贴出自己微信号。欢迎留言。
html仿今日头条下拉刷新,小程序 仿今日头条 带滑动切换的文章列表相关推荐
- Android仿微信首页下拉显示小程序列表
花点时间重新熟悉一下AndroidUI方面的东西,把古董PullToRefreshView又撸了一遍,技术这种东西真是忘得快啊...在基础上新增一点东西,粗糙地实现了仿微信首页下拉显示小程序列表的样式 ...
- android微信下拉出现小程序,Android仿微信首页下拉显示小程序列表
花点时间重新熟悉一下AndroidUI方面的东西,把古董PullToRefreshView又撸了一遍,技术这种东西真是忘得快啊...在基础上新增一点东西,粗糙地实现了仿微信首页下拉显示小程序列表的样式 ...
- android微信下拉出现小程序,仿新版微信的小程序下拉栏
原标题:仿新版微信的小程序下拉栏 本项目会对金融交易软件中存在的各种View进行模仿绘制,提供详细的实现思路,收集整理相关算法.文档以及专业资料. https://github.com/scsfwgy ...
- SwipeRefreshLayout源码分析+自定义UC头条下拉刷新Demo
首先来看SwipeRefreshLayout(以下简称SR)的继承关系 NestedScrollingParent:嵌套滑动父接口 NestedScrollingChild :嵌套滑动子接口 Andr ...
- Android仿苹果版QQ下拉刷新实现(二) ——贝塞尔曲线开发鼻涕下拉粘连效果
前言 接着上一期 Android仿苹果版QQ下拉刷新实现(一) --打造简单平滑的通用下拉刷新控件 的博客开始,同样,在开始前我们先来看一下目标效果: 下面上一下本章需要实现的效果图: 大家看到这个效 ...
- vue 仿B站下拉刷新上拉加载
vue 仿B站下拉刷新上拉加载 功能大部分都是跟B站一样的,还是有一些瑕疵和小bug的,φ(>ω<*) 先上demo连接和gitHub项目地址吧 demo展示 https://github ...
- Android仿苹果版QQ下拉刷新实现(三)
前言 第三篇下拉刷新的博客来的稍微有点晚,因为前两篇的博客访问量一直不是很高,所以博主花了点时间修改了整体的Demo效果,处理了很多极端下拉情况下的显示问题,给大家呈现一个完美的下拉刷新控件.因为本文 ...
- Android仿苹果版QQ下拉刷新实现(一) ——打造简单平滑的通用下拉刷新控件
前言: 因为公司人员变动原因,导致了博主四个月没有动安卓,一直在做IOS开发,如今接近年前,终于可以花一定的时间放在安卓上了.好了,废话不多说,今天我们要带来的效果是苹果版本的QQ下拉刷新.首先看一下 ...
- html js微信朋友圈下拉刷新效果,仿朋友圈下拉刷新动画(基础动画)
示意图: 2.0.gif demo地址:仿朋友圈下拉刷新动画 动画的起源源于好奇 因为刚开是学动画,恨不得把所有的都实现一遍,试了一下微信朋友圈的下拉刷新动画. 如果ViewController的第一 ...
最新文章
- cmake (0)简介
- iPhone5:4G是否进入主流的风向标?
- 关于小程序的一些坑的总结
- 关于height、offsetheight、clientheight、scrollheight、innerheight、outerheight的区别
- 京东:截至11月11日00:09 累计下单金额超2000亿元
- 月薪一万在石家庄能过什么样的生活?
- Python办公自动化 - 2 Word办公自动化
- 杭电 4907 Task schedule ·
- POI3.8解决导出大数据量excel文件时内存溢出的问题
- (转)SQL Server当中生成一定范围的随机数
- c++在数组中添加元素_39. 数组中数值和下标相等的元素
- Redis-慢查询分析
- 怎么无痕去除图片中的文字
- 全新 16 核神经网络引擎,a13神经网络处理器
- 做一个模仿Windows画板喷漆笔刷效果
- 问题解决:前面板没声音PC喇叭响
- Photoshop使用边缘功能打造后期画意
- 复旦大学,计算机考研情况
- win10关闭了微软服务器,win10自带安全软件怎么关闭|win10关闭自带杀毒软件的两种方法...
- 2020智能语音产业生态及产业发展前景
热门文章
- 计算机网络——TCP/IP协议网络原理
- mac引导linux系统,最新Xp+Win7+Mac+Ubuntu四系统BootThink完美引导打造教程!
- [附源码]Java计算机毕业设计SSM宾馆管理信息系统
- fme往mdb里面写入日期datetime属性失败
- Win11 Sandbox沙盒默认英文改中文
- “U盘、手机卡、内存卡出错,打开提示“未格式化”,里面有重要的资料~别着急,就这样试试吧~”【U盘、内存卡使用时意外断电或死机导致U盘无法打开,提示未格式化,解决思路参考】
- Android 媒体 IV-支持的媒体格式
- 联想Y470装windows8 -- 两天装3遍的经验总结,供小白鼠使用
- Linux——扩展和缩减、删除逻辑卷
- c标签List 判断空、获取长度、遍历map、格式化时间