小程序 仿今日头条 带滑动切换的文章列表

发布时间: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仿今日头条下拉刷新,小程序 仿今日头条 带滑动切换的文章列表相关推荐

  1. Android仿微信首页下拉显示小程序列表

    花点时间重新熟悉一下AndroidUI方面的东西,把古董PullToRefreshView又撸了一遍,技术这种东西真是忘得快啊...在基础上新增一点东西,粗糙地实现了仿微信首页下拉显示小程序列表的样式 ...

  2. android微信下拉出现小程序,Android仿微信首页下拉显示小程序列表

    花点时间重新熟悉一下AndroidUI方面的东西,把古董PullToRefreshView又撸了一遍,技术这种东西真是忘得快啊...在基础上新增一点东西,粗糙地实现了仿微信首页下拉显示小程序列表的样式 ...

  3. android微信下拉出现小程序,仿新版微信的小程序下拉栏

    原标题:仿新版微信的小程序下拉栏 本项目会对金融交易软件中存在的各种View进行模仿绘制,提供详细的实现思路,收集整理相关算法.文档以及专业资料. https://github.com/scsfwgy ...

  4. SwipeRefreshLayout源码分析+自定义UC头条下拉刷新Demo

    首先来看SwipeRefreshLayout(以下简称SR)的继承关系 NestedScrollingParent:嵌套滑动父接口 NestedScrollingChild :嵌套滑动子接口 Andr ...

  5. Android仿苹果版QQ下拉刷新实现(二) ——贝塞尔曲线开发鼻涕下拉粘连效果

    前言 接着上一期 Android仿苹果版QQ下拉刷新实现(一) --打造简单平滑的通用下拉刷新控件 的博客开始,同样,在开始前我们先来看一下目标效果: 下面上一下本章需要实现的效果图: 大家看到这个效 ...

  6. vue 仿B站下拉刷新上拉加载

    vue 仿B站下拉刷新上拉加载 功能大部分都是跟B站一样的,还是有一些瑕疵和小bug的,φ(>ω<*) 先上demo连接和gitHub项目地址吧 demo展示 https://github ...

  7. Android仿苹果版QQ下拉刷新实现(三)

    前言 第三篇下拉刷新的博客来的稍微有点晚,因为前两篇的博客访问量一直不是很高,所以博主花了点时间修改了整体的Demo效果,处理了很多极端下拉情况下的显示问题,给大家呈现一个完美的下拉刷新控件.因为本文 ...

  8. Android仿苹果版QQ下拉刷新实现(一) ——打造简单平滑的通用下拉刷新控件

    前言: 因为公司人员变动原因,导致了博主四个月没有动安卓,一直在做IOS开发,如今接近年前,终于可以花一定的时间放在安卓上了.好了,废话不多说,今天我们要带来的效果是苹果版本的QQ下拉刷新.首先看一下 ...

  9. html js微信朋友圈下拉刷新效果,仿朋友圈下拉刷新动画(基础动画)

    示意图: 2.0.gif demo地址:仿朋友圈下拉刷新动画 动画的起源源于好奇 因为刚开是学动画,恨不得把所有的都实现一遍,试了一下微信朋友圈的下拉刷新动画. 如果ViewController的第一 ...

最新文章

  1. cmake (0)简介
  2. iPhone5:4G是否进入主流的风向标?
  3. 关于小程序的一些坑的总结
  4. 关于height、offsetheight、clientheight、scrollheight、innerheight、outerheight的区别
  5. 京东:截至11月11日00:09 累计下单金额超2000亿元
  6. 月薪一万在石家庄能过什么样的生活?
  7. Python办公自动化 - 2 Word办公自动化
  8. 杭电 4907 Task schedule ·
  9. POI3.8解决导出大数据量excel文件时内存溢出的问题
  10. (转)SQL Server当中生成一定范围的随机数
  11. c++在数组中添加元素_39. 数组中数值和下标相等的元素
  12. Redis-慢查询分析
  13. 怎么无痕去除图片中的文字
  14. 全新 16 核神经网络引擎,a13神经网络处理器
  15. 做一个模仿Windows画板喷漆笔刷效果
  16. 问题解决:前面板没声音PC喇叭响
  17. Photoshop使用边缘功能打造后期画意
  18. 复旦大学,计算机考研情况
  19. win10关闭了微软服务器,win10自带安全软件怎么关闭|win10关闭自带杀毒软件的两种方法...
  20. 2020智能语音产业生态及产业发展前景

热门文章

  1. 计算机网络——TCP/IP协议网络原理
  2. mac引导linux系统,最新Xp+Win7+Mac+Ubuntu四系统BootThink完美引导打造教程!
  3. [附源码]Java计算机毕业设计SSM宾馆管理信息系统
  4. fme往mdb里面写入日期datetime属性失败
  5. Win11 Sandbox沙盒默认英文改中文
  6. “U盘、手机卡、内存卡出错,打开提示“未格式化”,里面有重要的资料~别着急,就这样试试吧~”【U盘、内存卡使用时意外断电或死机导致U盘无法打开,提示未格式化,解决思路参考】
  7. Android 媒体 IV-支持的媒体格式
  8. 联想Y470装windows8 -- 两天装3遍的经验总结,供小白鼠使用
  9. Linux——扩展和缩减、删除逻辑卷
  10. c标签List 判断空、获取长度、遍历map、格式化时间