zoukankan      html  css  js  c++  java
  • 小程序-demo:妹纸图

    ylbtech-小程序-demo:妹纸图

    ylb

    1.返回顶部
    0、
       
    1、app.js
    //app.js
    App({
      onLaunch: function () {
        //调用API从本地缓存中获取数据
        var logs = wx.getStorageSync('logs') || []
        logs.unshift(Date.now())
        wx.setStorageSync('logs', logs)
      },
      getUserInfo:function(cb){
        var that = this
        if(this.globalData.userInfo){
          typeof cb == "function" && cb(this.globalData.userInfo)
        }else{
          //调用登录接口
          wx.login({
            success: function () {
              wx.getUserInfo({
                success: function (res) {
                  that.globalData.userInfo = res.userInfo
                  typeof cb == "function" && cb(that.globalData.userInfo)
                }
              })
            }
          })
        }
      },
      globalData:{
        userInfo:null
      }
    })
    2、app.json
    {
      "pages":[
        "pages/index/index",
        "pages/image/image"
      ],
      "window":{
        "backgroundTextStyle":"dark",
        "navigationBarBackgroundColor": "#fff",
        "navigationBarTitleText": "妹纸图",
        "navigationBarTextStyle":"black"
      }
    }
    3、app.wxss
    /**app.wxss**/
    4、project.config.json
    {
        "description": "项目配置文件。",
        "packOptions": {
            "ignore": []
        },
        "setting": {
            "urlCheck": false,
            "es6": true,
            "postcss": true,
            "minified": true,
            "newFeature": true
        },
        "compileType": "miniprogram",
        "libVersion": "2.2.3",
        "appid": "wx7d22ab7088f2db6a",
        "projectname": "meiziApp",
        "isGameTourist": false,
        "condition": {
            "search": {
                "current": -1,
                "list": []
            },
            "conversation": {
                "current": -1,
                "list": []
            },
            "game": {
                "currentL": -1,
                "list": []
            },
            "miniprogram": {
                "current": -1,
                "list": []
            }
        }
    }
    5、pages
    -image
    -index
    6、utils
    -constant.js
    //url相关
    var BASE_URL = "http://gank.io/api";
    var GET_MEIZHI_URL = BASE_URL.concat("/data/%E7%A6%8F%E5%88%A9/10/");
    
    // 将方法、变量暴露出去
    module.exports = {
        BASE_URL: BASE_URL,
        GET_MEIZHI_URL: GET_MEIZHI_URL
    }
    -util.js
    // 工具类
    function formatTime(date) {
      var year = date.getFullYear()
      var month = date.getMonth() + 1
      var day = date.getDate()
    
      var hour = date.getHours()
      var minute = date.getMinutes()
      var second = date.getSeconds()
    
    
      return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
    }
    
    function formatNumber(n) {
      n = n.toString()
      return n[1] ? n : '0' + n
    }
    
    module.exports = {
      formatTime: formatTime
    }
    7、
    2. pages返回顶部
    1、image
    a) .js
    Page({
        data: {
            url: "",
            hidden: false,
            toastHidden: true,
            modalHidden: true,
            toastText: "数据异常",
            loadingText: "加载中..."
        },
    
        onLoad: function (options) {
            that = this;
            if (options == null || options.url == null) {
                this.setData({ hidden: true, toastHidden: false });
                return;
            }
    
            this.setData({
                hidden: true,
                toastHidden: true,
                url: options.url
            })
        },
        //Toast信息改变
        onToastChanged: function (event) {
            this.setData({ toastHidden: true });
        },
        // 长按
        onlongclick: function () {
            this.setData({ modalHidden: false });
        },
        // 保存
        onSaveClick: function (event) {
            var mUrl = "";
            if (event.currentTarget.dataset.url != null)
                mUrl = event.currentTarget.dataset.url;
            console.log("download:" + mUrl);
            saveImage(mUrl);
        },
        // 取消
        onCancelClick: function (event) {
            this.setData({ modalHidden: true });
        },
    });
    
    var that;
    /**
     * 保存图片
     */
    function saveImage(mUrl) {
        that.setData({
            hidden: false,
            toastHidden: true,
            modalHidden: true,
            loadingText: "下载中..."
        });
        wx.downloadFile({
            url: mUrl,
            type: 'image',
            success: function (res) {
                console.log("download success");
                that.setData({
                    hidden: true,
                    toastHidden: false,
                    toastText: "恭喜你,图片保存成功"
                });
            },
            fail: function (res) {
                console.log("download fail");
                that.setData({
                    hidden: true,
                    toastHidden: false,
                    toastText: "保存失败,请稍后再试"
                });
            },
            complete: function (res) {
                console.log("download complete");
            }
        })
    }
    b) .json
    {}
    c) .wxml
    <!--image.wxml-->
    <view >
        <loading hidden="{{hidden}}" >
         {{loadingText}}
        </loading>
    
        <toast hidden="{{toastHidden}}" bindchange="onToastChanged">
            {{toastText}}
        </toast>
    
    <view bindlongtap = "onlongclick">
        <image class = "bigImage" mode="aspectFill" src="{{url}}" />
    </view>
    
    <modal title="是否保存?" confirm-text="保存" cancel-text="取消" data-url="{{url}}" 
        hidden="{{modalHidden}}" bindconfirm="onSaveClick" bindcancel="onCancelClick">
    </modal>
    
    </view>
    d) .wxss
    /*image.wxss*/
    .bigImage{
        width: 95%;
        height: 1000rpx;
        margin: auto;
        overflow: auto;   
        position: absolute;  
        top: 0; left: 0; bottom: 0; right: 0;  
    }
    e)
    2、index
    a) .js
    //index.js
    //获取应用实例
    var app = getApp()
    Page({
      data: {
        items: [],
        hidden: false,
        loading: false,
        // loadmorehidden:true,
        plain: false
      },
    
      onItemClick: function (event) {
        var targetUrl = "/pages/image/image";
        if (event.currentTarget.dataset.url != null)
          targetUrl = targetUrl + "?url=" + event.currentTarget.dataset.url;
        wx.navigateTo({
          url: targetUrl
        });
      },
    
      // loadMore: function( event ) {
      //   var that = this
      //   requestData( that, mCurrentPage + 1 );
      // },
    
      onReachBottom: function () {
        console.log('onLoad')
        var that = this
        that.setData({
          hidden: false,
        });
        requestData(that, mCurrentPage + 1);
      },
    
      onLoad: function () {
        console.log('onLoad')
        var that = this
        requestData(that, mCurrentPage + 1);
      }
    
    })
    
    /**
     * 定义几个数组用来存取item中的数据
     */
    var mUrl = [];
    var mDesc = [];
    var mWho = [];
    var mTimes = [];
    var mTitles = [];
    
    var mCurrentPage = 0;
    
    // 引入utils包下的js文件
    var Constant = require('../../utils/constant.js');
    
    /**
     * 请求数据
     * @param that Page的对象,用来setData更新数据
     * @param targetPage 请求的目标页码
     */
    function requestData(that, targetPage) {
      wx.showToast({
        title: '加载中',
        icon: 'loading'
      });
      wx.request({
        url: Constant.GET_MEIZHI_URL + targetPage,
        header: {
          "Content-Type": "application/json"
        },
        success: function (res) {
          if (res == null ||
            res.data == null ||
            res.data.results == null ||
            res.data.results.length <= 0) {
    
            console.error("god bless you...");
            return;
          }
    
    
          for (var i = 0; i < res.data.results.length; i++)
            bindData(res.data.results[i]);
    
          //将获得的各种数据写入itemList,用于setData
          var itemList = [];
          for (var i = 0; i < mUrl.length; i++)
            itemList.push({ url: mUrl[i], desc: mDesc[i], who: mWho[i], time: mTimes[i], title: mTitles[i] });
    
          that.setData({
            items: itemList,
            hidden: true,
            // loadmorehidden:false,
          });
    
          mCurrentPage = targetPage;
    
          wx.hideToast();
        }
      });
    }
    
    /**
     * 绑定接口中返回的数据
     * @param itemData Gank.io返回的content;
     */
    function bindData(itemData) {
    
      var url = itemData.url.replace("//ww", "//ws");
      var desc = itemData.desc;
      var who = itemData.who;
      var times = itemData.publishedAt.split("T")[0];
    
      mUrl.push(url);
      mDesc.push(desc);
      mWho.push(who);
      mTimes.push(times);
      mTitles.push("publish by:" + "@" + who + " —— " + times);
    }
    b) .json
    {}
    c) .wxml
    <!--index.wxml-->
    <view>
    
      <view class= "card" wx:for = "{{items}}">
      
        <view  data-url="{{item.url}}" bindtap = "onItemClick">
           <image class= "image" mode="aspectFill" src="{{item.url}}"/>
           <view class="title">{{item.title}}</view>
        </view>
    
      </view>
    
    </view>
    d) .wxss
    /**index.wxss**/
    .card {
        border: 2px solid #ffffff;
        border-radius: 5px;
        background-color: #ffffff;
        box-shadow: 0px 5px 1px #cccccc;
        margin: 8px;
        position: relative;
    }
    
    .loadmore {
        border: 0px solid #ffffff;
        border-radius: 5px;
        background-color: #ffffff;
        box-shadow: 0px 5px 1px #cccccc;
        margin: 8px;
    }
    
    .image{
      width:100%;
      height:240px; 
    }
    
    .title {
        padding: 14px;
        font-size: 14px;
    }
    e)
    3、
    3.返回顶部
     
    4.返回顶部
    1、https://gank.io/api/data/%E7%A6%8F%E5%88%A9/10/1
    {"error":false,"results":[{"_id":"5b7b836c9d212201e982de6e","createdAt":"2018-08-21T11:13:48.989Z","desc":"2018-08-21","publishedAt":"2018-08-21T00:00:00.0Z","source":"web","type":"u798fu5229","url":"https://ws1.sinaimg.cn/large/0065oQSqly1fuh5fsvlqcj30sg10onjk.jpg","used":true,"who":"lijinshanmx"},{"_id":"5b74e9409d21222c52ae4cb4","createdAt":"2018-08-16T11:02:24.289Z","desc":"2018-08-16","publishedAt":"2018-08-16T00:00:00.0Z","source":"api","type":"u798fu5229","url":"https://ws1.sinaimg.cn/large/0065oQSqly1fubd0blrbuj30ia0qp0yi.jpg","used":true,"who":"lijinshan"},{"_id":"5b7102749d2122341d563844","createdAt":"2018-08-13T12:00:52.458Z","desc":"2018-08-13","publishedAt":"2018-08-13T00:00:00.0Z","source":"api","type":"u798fu5229","url":"https://ww1.sinaimg.cn/large/0065oQSqly1fu7xueh1gbj30hs0uwtgb.jpg","used":true,"who":"lijinshan"},{"_id":"5b6bad449d21226f45755582","createdAt":"2018-08-09T10:56:04.962Z","desc":"2018-08-09","publishedAt":"2018-08-09T00:00:00.0Z","source":"web","type":"u798fu5229","url":"https://ww1.sinaimg.cn/large/0065oQSqgy1fu39hosiwoj30j60qyq96.jpg","used":true,"who":"lijinshanmx"},{"_id":"5b67b7fd9d2122195bdbd806","createdAt":"2018-08-06T10:52:45.809Z","desc":"2018-08-06","publishedAt":"2018-08-06T00:00:00.0Z","source":"api","type":"u798fu5229","url":"https://ww1.sinaimg.cn/large/0065oQSqly1ftzsj15hgvj30sg15hkbw.jpg","used":true,"who":"lijinshan"},{"_id":"5b63cd4e9d21225e0d3f58c9","createdAt":"2018-08-03T11:34:38.672Z","desc":"2018-08-03","publishedAt":"2018-08-03T00:00:00.0Z","source":"api","type":"u798fu5229","url":"https://ww1.sinaimg.cn/large/0065oQSqgy1ftwcw4f4a5j30sg10j1g9.jpg","used":true,"who":"lijinshan"},{"_id":"5b6151509d21225206860f08","createdAt":"2018-08-01T14:21:04.556Z","desc":"2018-08-01","publishedAt":"2018-08-01T00:00:00.0Z","source":"api","type":"u798fu5229","url":"https://ww1.sinaimg.cn/large/0065oQSqly1ftu6gl83ewj30k80tites.jpg","used":true,"who":"lijinshan"},{"_id":"5b60356a9d212247776a2e0e","createdAt":"2018-07-31T18:09:46.825Z","desc":"2018-07-31","publishedAt":"2018-07-31T00:00:00.0Z","source":"api","type":"u798fu5229","url":"http://ww1.sinaimg.cn/large/0065oQSqgy1ftt7g8ntdyj30j60op7dq.jpg","used":true,"who":"lijinshan"},{"_id":"5b5e93499d21220fc64181a9","createdAt":"2018-07-30T12:25:45.937Z","desc":"2018-07-30","publishedAt":"2018-07-30T00:00:00.0Z","source":"web","type":"u798fu5229","url":"https://ww1.sinaimg.cn/large/0065oQSqgy1ftrrvwjqikj30go0rtn2i.jpg","used":true,"who":"lijinshanmx"},{"_id":"5b50107f421aa917a31c0565","createdAt":"2018-07-19T12:15:59.226Z","desc":"2018-07-19","publishedAt":"2018-07-19T00:00:00.0Z","source":"web","type":"u798fu5229","url":"https://ww1.sinaimg.cn/large/0065oQSqly1ftf1snjrjuj30se10r1kx.jpg","used":true,"who":"lijinshanmx"}]}
    2、
    5.返回顶部
    0、
    1、
     
    6.返回顶部
     
    warn 作者:ylbtech
    出处:http://ylbtech.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    多线程-工作组模式
    iOS端架构、基本组成与使用说明
    iOS,Core Animation--负责视图的复合功能
    Container Views
    IOS UIView 01-View开始深入 绘制像素到屏幕上
    View Programming Guide for iOS
    UI绘图与信息、样式
    iOS绘图框架CoreGraphics分析
    iOS开发系列--打造自己的“美图秀秀”
    Array与NSArray关系
  • 原文地址:https://www.cnblogs.com/storebook/p/9513112.html
Copyright © 2011-2022 走看看