一人で行った最初の小規模なプログラムプロジェクトの概要

このプロジェクトには、ウェルカムページ、ニュースリストページ、詳細ページ、ムービーホームページ、リストページ、検索ページ、詳細ページの合計6つの個人用ページがあります。各ページで使用されるアプレットAPIの概要は次のとおりです

ようこそページ

ページ全体のコンポーネントは、アバター、名前、およびページにジャンプするためのボタンです

welcome.json

ナビゲーションを変更する色を変更する

{
    
    
  "navigationBarBackgroundColor": "#b3d4db"
}

welcome.js

この場所には問題があります。つまり、ジャンプ先のページがtabBarの場合、wx.switchTabメソッドを使用する必要があります。そうしないと、クリックが応答しません。


onTap: function(){
    
    
	//vx.navigateTo  这个方法就是带返回功能的
    // wx.navigateTo({
    
    
    //   url: '../posts/posts',
    // })
    // wx.redirectTo  是没有返回功能的 
    // wx.redirectTo({
    
    
    //   url: '../posts/posts',
    // })
    
    wx.switchTab({
    
    
      url: '../posts/posts',
    })
  },

ニュース一覧ページ

1つ目は、ルーティング、ナビゲーションの色、グローバルapp.jsonのtabBar切り替えメニューを構成することです。使用されるAPIには、catch:tap = "onSwiperTap"イベントバインディング、wx:for = "{ {postList}}" wxが含まれます:for-item = "item"リストループ、data-postId = "{ {item.postId}}"イベントパラメータの送信、テンプレートデータの送信

{
    
    
  "pages": [
    "pages/welcome/welcome",
    "pages/posts/posts",
    "pages/posts/post-detail/post-detail",
    "pages/movies/movies",
    "pages/movies/more-movie/more-movie",
    "pages/movies/movie-detail/movie-detail"
  ],
  "window": {
    
    
    "navigationBarBackgroundColor": "#405f80"
  },
  "tabBar": {
    
    
    "borderStyle": "white",
    "color": "#333",
    "selectedColor": "#405f80",
    "list": [
      {
    
    
        "pagePath": "pages/posts/posts",
        "text": "阅读",
        "iconPath": "/images/tab/yuedu.png",
        "selectedIconPath": "/images/tab/yuedu_hl.png"
      },
      {
    
    
        "pagePath": "pages/movies/movies",
        "text": "电影",
        "iconPath": "/images/tab/dianying.png",
        "selectedIconPath": "/images/tab/dianying_hl.png"
      }
    ]
  }
}

posts.wxml

カルーセルウィンドウとリストテンプレートテンプレート

カルーセルウィンドウコード

<swiper catch:tap="onSwiperTap" indicator-dots="true" autoplay="true">
    <swiper-item>
      <image  src="/images/wx.png" data-postId="3"></image>
    </swiper-item>
    <swiper-item>
      <image src="/images/vr.png" data-postId="4"></image>
    </swiper-item>
    <swiper-item>
      <image src="/images/iqiyi.png" data-postId="5"></image>
    </swiper-item>
  </swiper>

ループコードのリスト

<import src="post-item/post-item-tem.wxml"/>  //模板引用
<block wx:for="{
    
    {postList}}" wx:for-item="item" wx:for-index="idx" wx:key="idx">
    <view catch:tap="onPostTap" data-postId="{
    
    {item.postId}}"> 
    //如果是 {
    
    {...item}} 等于把对象展开 ,那在模板里面就不用{
    
    {item.avatar}} 直接 {
    
    {avatar}} 这样就能拿到值了
      <template is="postItem" data="{
    
    {item}}" />  
    </view>
  </block>

posts.js

詳細にジャンプする方法

onPostTap: function (event) {
    
    
    var postId = event.currentTarget.dataset.postid;
    wx.navigateTo({
    
    
      url: 'post-detail/post-detail?id=' + postId,
    })
  },

ライフサイクル関数onLoadでリストデータをローカルに作成します。

var postsData = require('../../data/posts-data.js')
onLoad: function () {
    
    
    this.setData({
    
    
      postList: postsData.postList
    }) //es6简写
  }

ポストアイテムテンプレート

テンプレートは各フィールドに値を追加することです

<template name="postItem">
  <view class="post-container">
    <view class="post-author-data">
      	<image class="post-author" src="{
    
    {item.avatar}}"></image>
      	<text class="post-data">{
    
    {
    
    item.date}}</text>
     </view>
    </view>

ニュース詳細ページ

ここで使われている機能はたくさんありますが、ページコラムによるとまだ取り出しています

post-detail.wxml

三元操作

<image class="head-image" src="{
    
    {isPlayingMusic?postData.music.coverImg:postData.headImgSrc}}"></image>

wx:if wx:else、catch:tapイベントメソッドが使用されます

<image catch:tap="onCollectionTap" wx:if="{
    
    {collected}}" src="/images/icon/collection.png"></image>
      <image catch:tap="onCollectionTap" wx:else src="/images/icon/collection-anti.png"></image>

post-detail.json

ページタイトルを追加

{
    
    
  "navigationBarTitleText": "阅读"
}

post-detail.js

最初にローカルデータを作成します
var postsData = require( '…/…/…/ data / posts-data.js')
//これはグローバルapp.jsのグローバル変数に適用する
var app = getApp()

App({
    
    
  globalData:{
    
    
    g_isPlayingMusic:false, //音乐是否在播放
    g_currentMusicPostId: null, //哪个音乐正在播放
    doubanBase: "http://t.yushu.im"  //请示地址
  },
})

次に、ライフサイクル関数onLoadでrequireを介してこのjsにインポートします

onLoad: function(options) {
    
    
	//获取详情数据 
	var postId = options.id;
    this.data.currentPostId = postId
    var postData = postsData.postList[postId]
    // this.data.postData = postData;
    this.setData({
    
    
      postData: postData
    })
    //鉴听是否收藏方法
    var postsCollected = wx.getStorageSync('posts_collected')
    if (postsCollected) {
    
    
      var postCollected = postsCollected[postId]
      if (postCollected) {
    
    
        this.setData({
    
    
          collected: postCollected
        })
      }
    } else {
    
    
      var postsCollected = {
    
    }
      postsCollected[postId] = false;
      wx.setStorageSync('posts_collected', postsCollected)
    }
     //鉴听音乐播放方法
    var g_isPlayingMusic = app.globalData.g_isPlayingMusic //音乐是否在播放
    var g_currentMusicPostId = app.globalData.g_currentMusicPostId  //哪个详情页的音乐正在播放 
    if (g_isPlayingMusic && g_currentMusicPostId === postId) {
    
    
      this.setData({
    
    
        isPlayingMusic: true
      })
    }
    this.setAudioMonitor()
}

最初の問題は、音楽再生パッケージのsetAudioMonitorメソッドがonLoadで呼び出され、現在の音楽ステータスを確認することです。

setAudioMonitor: function() {
    
    
    wx.onBackgroundAudioPlay(() => {
    
    
      this.setData({
    
    
        isPlayingMusic: true
      })
      app.globalData.g_isPlayingMusic = true
      app.globalData.g_currentMusicPostId = this.data.currentPostId
    })
    wx.onBackgroundAudioPause(() => {
    
    
        this.setData({
    
    
          isPlayingMusic: false
        })
        app.globalData.g_isPlayingMusic = false
        app.globalData.g_currentMusicPostId = null
      }),
      wx.onBackgroundAudioStop(() => {
    
    
        this.setData({
    
    
          isPlayingMusic: false
        })
        app.globalData.g_isPlayingMusic = false
        app.globalData.g_currentMusicPostId = null
      })
  },

音楽ボタンをクリックするメソッドは、2つのAPI wx.pauseBackgroundAudio()を使用して一時停止し、wx.playBackgroundAudioを使用して再生します

// 音乐播放 
  onMiusicTap: function(event) {
    
    
    var isPlayingMusic = this.data.isPlayingMusic
    var currentPostId = this.data.currentPostId
    var postData = postsData.postList[currentPostId]
    // 监听音乐暂停事件
    if (isPlayingMusic) {
    
    
      wx.pauseBackgroundAudio()
      this.setData({
    
    
        isPlayingMusic: false
      })
    } else {
    
    
      wx.playBackgroundAudio({
    
    
        dataUrl: postData.music.url,  // 音乐地址 
        title: postData.music.title,  //名称
        coverImgUrl: postData.music.coverImg  //封面图
      })
      this.setData({
    
    
        isPlayingMusic: true
      })
    }
  }

2番目の収集メソッド
は、onLoadで収集ステータスを監視します。使用されるAPIは、wx.getStorageSync fetchとwx.setStorageSync saveです。

お気に入りボタンをクリックする方法

// 收藏方法  
  onCollectionTap: function(event) {
    
    
    // this.getPostsCollectedAsy()
    this.getPostsCollectedSyc()
  },
  //同步缓存方法
  getPostsCollectedSyc: function() {
    
    
    var postsCollected = wx.getStorageSync('posts_collected')
    var postCollected = postsCollected[this.data.currentPostId]
    postCollected = !postCollected  // 取反
    postsCollected[this.data.currentPostId] = postCollected
    this.showToast(postsCollected, postCollected)
  },
  //收藏弹窗 方法 
  showToast(postsCollected, postCollected) {
    
    
    //更新缓存
    wx.setStorageSync('posts_collected', postsCollected)
    //更新数据
    this.setData({
    
    
      collected: postCollected
    })
    wx.showToast({
    
    
      title: postCollected ? '收藏成功' : '取消成功',
      duration: 1000
    })
  },

知らないうちに、ほぼ2時間が経過した、3ページしか整理されていない、または映画ページが整理されていない、多くの知識ポイントが使用されている、言うまでもなく、映画で使用されているWebサイトのパブリックAPIである映画ページを整理し始めた動的ローディングデータムービーのホームページ、リストページ、詳細ページに対応

映画ホーム

検索ボックスと3つのテンプレートで使用される同じテンプレート

おすすめ

転載: blog.csdn.net/qq_34312604/article/details/105705409