热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NBA资讯小程序

话不多说,先来一张我科的图坐镇NBA资讯小程序出来啦作为一个刚接触小程序不久的前端小白菜,恰逢最近NBA如火如荼的双抢七大战、骑士与勇士又又又又又一次的巅峰



话不多说,先来一张我科的图坐镇

NBA资讯小程序出来啦

作为一个刚接触小程序不久的前端小白菜,恰逢最近NBA如火如荼的双抢七大战、骑士与勇士又又又又又一次的巅峰对决(实话:真的看腻了- -),决定写一个NBA资讯的小程序来玩玩。下面讲讲小程序的开发

  • 开发工具:vscode 微信开发者工具
  • 开发技术:(Wxml)Html (Wxss)css Javascript
  • 开发流程:注册一个appid就可以马上进行开发了简易教程

这里还要提一下两个网站Easy Mock、Iconfont 
前者是可以快速生成模拟数据的持久化服务这里展示下我的数据接口
后者是可以找到许多你想要的小图标库


效果图

身为新手写的过程中不碰到些问题那怎么可能呢- -

下面就来讲讲我碰到的那些问题吧~

1.首页日期比赛数据切换(就是那个能点能横滑的部分) 
当时看到这觉得无非就是左右button点击事件进行切换数据 然后再跟滑动date绑定一起
想到就开始写 左右点击一下就写完了

changeleft:function() {
    const index = this.data.index - this.data.num;//获取改变后的那组数据下标
    this.setData({
      agenda: this.data.result[index],// 将球队名 球队分数传入
      light: this.data.result[index].leftgrade > 
      this.data.result[index].rightgrade ? '1' : '2', //比较分数大小 将分数高的color改变
      index: index,
      current:index,
      showLeft: true,//改变图标为浅色图标
    })
  }

注意一个细节,当左右没有更多数据切换时 图标颜色会改变 变浅色 示意不能点了
所以要进行if判断左右两边是否为临界值 也就是数组的第一项和最后一项。

 turnleft: function (e) {
    const index = this.data.index -this.data.num;
      if (index <= -1) {
        return;
      } else if (index == 0) {
        this.changeleft();
      } else {
        this.changeleft();
        this.setData({
          showLeft: false,
          showRight: false,
        })
      }
  },

这里展示左边的方法 右边类似。于是开始着手写滑动那部分,这里就吃了没有经验的大亏了,想到滑动立马想到了scroll-view 噼里啪啦写了一堆,可一点击我傻了 这日期是瞬间变化 没有滑动的那个效果啊,难道是这个不行? 于是我又使用scroll-left 算距离 每一项设置好padding 写了许久也算是完成了 一试还是没有滑动效果...(一口老血吐出来)

最后还是用swiper搞定了这效果

 swiperchange:function(e) {
    const current = e.detail.current;//取当前swiper index
    const ind = this.data.index;//之前数组的index 
    const dex = current - ind;//判断左滑右滑
      if(current-ind >0){
        this.setData({
          num:dex //滑动多少项
        })
      this.turnright() //左滑事件
      this.setData({
        num:1   //必须回1 因为点击事件每次改变的数组项为1
      })
    }else if(current - ind <0){
      this.setData({
        num:-dex 
      })
     this.turnleft()
     this.setData({
       num:1
     })
    }

2.文章页返回


这里可以设置navigator 或者直接bindtap 但是要注意返回为tabBar的话 open-type 和跳转方法为switchTab

back: function (e) {
    wx.switchTab({
      url: "../../pages/index/index"
    });
  }

3.scroll-view滑动问题 
很多人可能会碰到swiper不能滑动等问题要注意以下几点

  • scroll-view 中的需要滑动的元素不可以用 float 浮动;
  • scroll-view 中的包裹需要滑动的元素的大盒子用 display:flex; 是没有作用的;
  • scroll-view 中的需要滑动的元素要用 dislay:inline-block; 进行元素的横向编排;
  • 包裹 scroll-view 的大盒子有明确的宽和加上样式--> overflow:hidden; white-space:nowrap;

4.上拉加载下拉刷新问题

  • 下拉刷新需要在当前页的json或者app.json设置

"enablePullDownRefresh": true,

  • 下拉事件一定要加wx.hideLoading() 不然刷新小点一直出现

    onPullDownRefresh() {
       // console.log('下拉了');
       wx.showLoading({
         title: '玩命加载中',
       })
       wx.request({
         url: API_BASE,
         success: (res) => {
           this.setData({
             news: res.data.data.new,
             currentPage: 1,
             hide:false
           })
           wx.hideLoading();//!!!一定要加
           wx.stopPullDownRefresh()
         }
       })
     },
    • 上拉加载可以使用 onPullDownRefresh() 或者bindscrolltolower() 前者是页面触底 后者是scroll滚动条到底部,二者视情况使用。
     onReachBottom() {
       let { currentPage, totalPages } = this.data  //解构当前页和共几页 es6语法
       if (currentPage >= totalPages) {
         this.setData({
           hide:true,
         })
         return;
       }
       wx.showLoading({
         title: '玩命加载中',
       })
       currentPage += 1; //页数+1
       wx.request({
         url: API_BASE,
         success: (res) => {
           const news = [ //将请求的数据和原本的数据一起放入
             ...this.data.news,//扩展运算符( spread )是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列 es6语法
             ...res.data.data.new,
           ];
           this.setData({
             news,
             currentPage
           })
           wx.hideLoading();
         }
       })
     },

5.wx:if选择渲染问题
在我的项目中 有很多需要单独添加样式 或者事件操作 可以使用wx:if 配合block进行选择渲染


<block wx:if="{{video.title == item.title}}"> <view class="btn" style="display: none;">view> <text class="content-title " style="white-space: normal;color: #42F32F;">{{item.title}}text> block> <block wx:else> <view class="btn" >view> <text class="content-title" style="white-space: normal;">{{item.title}}text> block>

6.navigator跳转问题

   var that = this;
   var id = that.data.new.id;//获取文章id
   if (id === 'n8') {//判断是否为最后一篇
     wx.showModal({
       title: '提示',
       content: '没有更多内容了',
       showCancel: false,
       success: function (res) {
       } })
       return; //为最后一篇则无需请求数据
   }
   wx.request({
     url: API_BASE,
     success: (res) => {
       for (let i = 0; i data.data.new.length; i++) {
         if (id === res.data.data.new[i].contentId) { //判断是否请求到对应数据
          // console.log("找到了");
           this.setData({
             news: res.data.data.new[i + 1],//将请求到数据的数据传入
           })
           var it = this;
           wx.navigateTo({
             url: 'news?id=' + this.data.news.contentId + '&title=' + this.data.news.title + '&from=' + this.data.news.from + '&image=' + this.data.news.image + '&cOntent=' + this.data.news.content + ''
           })
         }
       }
     }
   })
 },

写在最后

在写项目中还有碰到许多问题,video黑边 scroll-view文字换行等问题,大家百度或者查看官方文档大都能解决。 
由于是初学小程序不久,很多方面没有考虑好 没有对request等进行封装,模块组件化,写了很多重复的代码。不过这都不是事,谁不是先爬再跑的! 
想了解更多可以查看我的项目
欢迎大家提供宝贵的建议和意见,社区重在分享,有啥好东西就别藏着啦


推荐阅读
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 2022年2月 微信小程序 app.json 配置详解:启用调试模式
    本文将详细介绍如何在微信小程序的 app.json 文件中启用调试模式(debug),并通过实际案例展示其配置方法和应用场景。 ... [详细]
  • 近期,微信公众平台上的HTML5游戏引起了广泛讨论,预示着HTML5游戏将迎来新的发展机遇。磊友科技的赵霏,作为一名HTML5技术的倡导者,分享了他在微信平台上开发HTML5游戏的经验和见解。 ... [详细]
  • 使用ArcGIS for Java和Flex浏览自定义ArcGIS Server 9.3地图
    本文介绍了如何在Flex应用程序中实现浏览自定义ArcGIS Server 9.3发布的地图。这是一个基本的入门示例,适用于初学者。 ... [详细]
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 【实例简介】本文详细介绍了如何在PHP中实现微信支付的退款功能,并提供了订单创建类的完整代码及调用示例。在配置过程中,需确保正确设置相关参数,特别是证书路径应根据项目实际情况进行调整。为了保证系统的安全性,存放证书的目录需要设置为可读权限。值得注意的是,普通支付操作无需证书,但在执行退款操作时必须提供证书。此外,本文还对常见的错误处理和调试技巧进行了说明,帮助开发者快速定位和解决问题。 ... [详细]
  • 在 Android 开发中,`android:exported` 属性用于控制组件(如 Activity、Service、BroadcastReceiver 和 ContentProvider)是否可以被其他应用组件访问或与其交互。若将此属性设为 `true`,则允许外部应用调用或与之交互;反之,若设为 `false`,则仅限于同一应用内的组件进行访问。这一属性对于确保应用的安全性和隐私保护至关重要。 ... [详细]
  • 如何使用 `org.apache.poi.openxml4j.opc.PackagePart` 类中的 `loadRelationships()` 方法及其代码示例详解 ... [详细]
  • 深入解析Java虚拟机的内存分区与管理机制
    Java虚拟机的内存分区与管理机制复杂且精细。其中,某些内存区域在虚拟机启动时即创建并持续存在,而另一些则随用户线程的生命周期动态创建和销毁。例如,每个线程都拥有一个独立的程序计数器,确保线程切换后能够准确恢复到之前的执行位置。这种设计不仅提高了多线程环境下的执行效率,还增强了系统的稳定性和可靠性。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • 提升Android开发效率:Clean Code的最佳实践与应用
    在Android开发中,提高代码质量和开发效率是至关重要的。本文介绍了如何通过Clean Code的最佳实践来优化Android应用的开发流程。以SQLite数据库操作为例,详细探讨了如何编写高效、可维护的SQL查询语句,并将其结果封装为Java对象。通过遵循这些最佳实践,开发者可以显著提升代码的可读性和可维护性,从而加快开发速度并减少错误。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
author-avatar
一个不需要幸福的男人丶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有