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

微信小程序-仿知乎主题日报列表

这个篇文章继续带大家一起练习微信小程序的布局。下面将会按照以下的顺序介绍:网络请求的实现工具类的实现布局的实现逻辑的实现样式的实现

这个篇文章继续带大家一起练习微信小程序的布局。

下面将会按照以下的顺序介绍:

  1. 网络请求的实现

  2. 工具类的实现

  3. 布局的实现

  4. 逻辑的实现

  5. 样式的实现

1.网络请求的实现

在js文件中通过Page()函数注册一个界面,然后在data定义一个theme对象,这个对象用来接收网络请求的结果,接着在onLoad()函数中调用wx.request进行网络请求,请求成功的数据,赋值给data中的theme对象。


    var URL_THEME='http://news-at.zhihu.com/api/4/theme/11';

    Page({

        data:{
            theme:{}
        },

        /** * 加载网络上的数据 */
        onLoad: function () {

            console.log('--onLoad--');
            var that=this;
            wx.request({
              url: URL_THEME,
              method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
              success: function(res){
                 that.setData({
                  'theme': res.data
                })
              },
              fail: function() {
              },
              complete: function() {
              }
            })
        },

     })

2.工具类的实现

修改utils文件中的util.js工具类,这个工具类是获取日期的工具类


    function formatTime(date) {
      var year = date.getFullYear()
      var month = date.getMonth() + 1
      var day = date.getDate()

      return [year, month, day].map(formatNumber).join('/')

    }

    function formatNumber(n) {
      n = n.toString()
      return n[1] ? n : '0' + n
    }

    module.exports = {
      formatTime: formatTime
    }

工具类在Page()函数中使用,先通过require将工具类引入,然后在onLoad()函数中调用工具类中的formatTime方法获取系统时间,并把时间赋值给data中的time变量。


    var util = require('../../utils/util.js')

     ...

    Page({

        data:{
            theme:{},
            time:"",
        },

        /** * 加载网络上的数据 */
        onLoad: function () {
             this.setData({
                  'time': util.formatTime(new Date())
             })
            console.log('--onLoad--');
            var that=this;
            wx.request({
            ....
            ....
            ....
            })
        },



    })

3.布局的实现

整个布局分类三部分:轮播图,今日热点,重复的item.

  <swiper indicator-dots="true" autoplay="true" interval="4000" duration="2000"> <block wx:for="{{theme.editors}}" wx:for-index="index"> <swiper-item class="swiper-items" > <image class="swiper-image" src="{{theme.image}}">image> swiper-item> block> swiper>  <View class="view-tile" > <text class="view-tile-text">今日热点text> View>  <block wx:for="{{theme.stories}}" wx:for-index="index"> <View class="view-item "> <block wx:for="{{item.images}}" wx:for-item="imgUrl" wx:for-index="index"> <image wx:if="{{imgUrl!=null}}" class="imgClass" src="{{imgUrl}}" binderror="imageError">image> block> <View class="view-item-text "> <text class="item-text-title">{{item.title}}text> <View class="view-item-text-time "> <text class="item-text-time">{{time}}text> View> View> View> <View class="view-line" > View> block> 

4.逻辑的实现

1.引入了util.js工具,获取系统的时间,并把值赋值给time变量

2.实现网络强求,获取json字符,并把json字符窜的值赋值给theme这个对象

3.imageError监听图片的加载情况


    var util = require('../../utils/util.js')

    var URL_THEME='http://news-at.zhihu.com/api/4/theme/11';

    Page({

        data:{
            theme:{},
            time:""
        },

        /** * 加载网络上的数据 */
        onLoad: function () {
             this.setData({
                  'time': util.formatTime(new Date())
             })
            console.log('--onLoad--');
            var that=this;
            wx.request({
              url: URL_THEME,
              method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
              success: function(res){
                 that.setData({
                  'theme': res.data
                })
              },
              fail: function() {
              },
              complete: function() {
              }
            })
        },

        /** * 监听图片加载 */
        imageError:function(e){
             console.log('image3发生error事件,携带值为', e.detail.errMsg)

        }

    })

5.样式的实现


    /*今日热点的view的样式*/
    .view-tile{ display: block; width: 100%; height: 25px; padding-top: 5px; background-color: ghostwhite; }
    /*每一个item的view的样式*/
    .view-item{ display: flex; justify-content: center; align-items: center; flex-direction: row; }
    /*每一个item中文本的view的样式*/
    .view-item-text{ display: flex; justify-content:center; align-items: flex-start; flex-direction: column; flex: 1; }
    /*每一个item中时间的view的样式*/
    .view-item-text-time{ display: flex; justify-content:flex-end; align-items: flex-end; width: 100%; }

    /*分界线view的样式*/
    .view-line{ width: 100%; height: 10px; background-color: gainsboro; }
    /*图片的样式*/
    .imgClass{ width: 70px; height:70px; margin-bottom: 15px; margin-left: 15px; margin-top: 15px; border-radius: 50%; }
    /*今日热点的文字样式*/
    .view-tile-text{ margin: 5px; }

    /*每一个item中文字的样式*/
    .item-text-title{ /*规定文字显示两行,超过两行的使用省略号*/ display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; word-break: break-all; overflow: hidden; font-size: 18px; margin-bottom: 15px; margin-top: 15px; margin-left: 15px; margin-right: 5px; }
    /*每一个item中时间的样式*/
    .item-text-time{ color: gray; margin-right: 5px; margin-bottom: 5px; }


5.效果图

图片空白处是图片加载失败,这个原因暂时还没有解决。


推荐阅读
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
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社区 版权所有