zoukankan      html  css  js  c++  java
  • 微信小程序-今日头条案例

    github地址:   https://github.com/HowName/toutiao

    项目为仿今日头条,使用了百度ApiStore接口查询数据,使用微信组件/api有 封装请求方法,底部tab,启动页动画,loading,scroll-view,swiper,列表页支持上下拉加载更多

    效果图:

    启动欢迎页,几行代码可实现旋转与缩放:

     //flash.js 
     onReady:function(){
          // 页面渲染完成
          var that = this,duration = 1500;
          var animation = wx.createAnimation({
              duration: duration,
          });
    
          //step() 方法表示一组动画的结束
          animation.scale(2).rotate(360).step();
          animation.scale(1).step();
      
          this.setData({
              animationData : animation.export()
          });
    
          var timestamp = new Date().getTime();
          setTimeout(function(){
            wx.redirectTo({
              url: '../index/index?time='+timestamp
            })
          },duration*2.5);
    
      },
    

      

    //flash.wxml
    <image class="flash-img" animation="{{animationData}}" src="{{src}}" ></image>
    

      

    网络请求方法:

    //app.js
      req: function(url,data,param){
        var requestData = {
          url: url,
          data: typeof data == 'object' ? data : {},
          method: typeof param.method == 'string' && param.method.length > 0 ? param.method.toUpperCase() : 'GET',
          header: typeof param.header == 'object' ? param.header : {},
          success: function(res) {
          	typeof param.success == 'function' && param.success(res);
          },
          fail: function(res){
            typeof param.fail == 'function' && param.fail(res);
          },
          complete: function(res){
            typeof param.complete == 'function' && param.complete(res);
          }
        };
        wx.request(requestData);
      },
    

    列表页:

    //index.js
    var app = getApp(),currentPage = 1;
    const URL = "http://apis.baidu.com/showapi_open_bus/channel_news/search_news";
    
    Page({
      data:{
        imgUrls: [
          'http://img02.tooopen.com/images/20150928/tooopen_sy_143912755726.jpg',
          'http://img06.tooopen.com/images/20160818/tooopen_sy_175866434296.jpg',
          'http://img06.tooopen.com/images/20160818/tooopen_sy_175833047715.jpg'
        ],
        toView: "",
        loadingHidden:true,
        renderData:[],
      },
      onLoad:function(options){
        this.loadDataFromServer();
      },
      //api读取数据
      loadDataFromServer: function(){
        var that = this;
        that.changeLoadingStatus(false);
        app.req(URL,{
          page : currentPage,
          needContent : 1,
        },{
          header: { apikey: app.globalData.apikey },
          success:function(resp){
            console.log(resp);
            console.log("成功加载页数 "+currentPage);
            var tempData = resp.data.showapi_res_body.pagebean.contentlist;
            var toViewId = currentPage % 2 == 0 ? "top-id" : "top-id2"; //需要改变值页面才会重新渲染
            that.setData({
               //renderData: that.data.renderData.concat(tempData),  合并数组容易超出长度,无法做到无限加载
               renderData: tempData,
               toView: toViewId,
            });
            that.changeLoadingStatus(true);
          }
        });
    
      },
      //加载上一页或者下拉刷新
      refresh:function(e){
          currentPage = currentPage > 1 ? --currentPage : 1;
          this.loadDataFromServer();
      },
      //加载下一页
      loadMore:function(e){
          ++currentPage;
          this.loadDataFromServer();
      },
      //改变loading状态
      changeLoadingStatus: function(bool){
        this.setData({
          loadingHidden: bool
        });
      },
      onReady:function(){
        // 页面渲染完成
        wx.setNavigationBarTitle({
          title: '列表'
        });
      },
      onShow:function(){
        // 页面显示
      },
      onHide:function(){
        // 页面隐藏
      },
      onUnload:function(){
        // 页面关闭
      }
    });
    //index.wxml
    <loading hidden="{{loadingHidden}}"> 
        加载中...
    </loading>
    
    <scroll-view scroll-y="true" style="height: 100%;" scroll-into-view="{{toView}}" upper-threshold="5" lower-threshold="5" bindscrolltoupper="refresh" bindscrolltolower="loadMore">
    
        <swiper indicator-dots="true" id="swiper-view" autoplay="true" interval="2000">
            <block wx:for="{{imgUrls}}">
                <swiper-item>
                    <image src="{{item}}" width="100%" height="150"/>
                </swiper-item>
            </block>
        </swiper>
    
        <view id="top-id"> </view>
        <view id="top-id2"> </view>
        <block wx:for="{{renderData}}">
            <view class="container">  
                <view class="title">
                    <text class="title-text">{{item.title}}</text>
                </view>
            
                <view class="images"  wx:if="{{item.imageurls.length > 0}}">
                    <block wx:for="{{item.imageurls}}" wx:for-item="imgItem" wx:for-index="imgIndex">
                        <image wx:if="{{imgIndex <= 2}}"  src="{{imgItem.url}}"></image>
                    </block>
                </view>
                <view class="source">{{item.source}}  {{item.pubDate}}</view>
            </view>
        </block>
    </scroll-view>
    

     完!

      

      

  • 相关阅读:
    Leetcode刷题记录--39. 组合总和
    Leetcode刷题记录--31. 下一个排列
    Leetcode刷题记录--22. 括号生成(回溯)
    Leetcode刷题记录--17. 电话号码的字母组合(回溯)
    分布式学习之--6.824MITLab1记录
    总结javascript处理异步的方法
    引用、浅拷贝及深拷贝 到 Map、Set(含对象assign、freeze方法、WeakMap、WeakSet及数组map、reduce等等方法)
    Vue之富文本tinymce爬坑录
    iOS 13 正式发布,来看看有哪些 API 变动
    Vuex,从入门到...
  • 原文地址:https://www.cnblogs.com/longer756567406/p/5932565.html
Copyright © 2011-2022 走看看