Сделать кофе с кодом

внешний интерфейс GitHub Тенсент анимация
Сделать кофе с кодом

предисловие

Самым счастливым занятием для программиста может быть жарким летом, когда он включает кондиционер, пьет кофе и печатает код. Так как я только в последние дни познакомился с мини-программами WeChat, мне пришла в голову идея сделать мини-программу. При разработке этой небольшой программы мы столкнулись со многими проблемами и получили много преимуществ. Далее я опишу некоторые из проблем, с которыми я столкнулся, и те, которые я решил. Надеюсь принести вам некоторую помощь

Небольшие детали программы

Эффект домашней страницы

На главной странице не так много вещей, в основном проблемы с макетом. Карусель на верхнем уровне (swiper). Внизу находится список с циклом wx:for. В макете структуры используются плавающие элементы. Используйте nth для выбора одного плавающего левого и другого плавающего правого, и установите расстояние между левым и правым

  • плавающий css
.starbucks-list:nth-child(n){
  float: left;
  margin-left: 40rpx;
}
.starbucks-list:nth-child(2n){
  float: right;
  margin-left: 0;
  margin-right: 40rpx;
}

Далее будет подробно описано несколько функций


  • scroll-x и переключение изображений

说到这里不得不吐槽一些小程序开发者工具
也可能是电脑的问题在电脑上开发者工具的scroll-x无效,真机上正常使用,

Давайте поговорим о переключении изображений: у меня есть идентификатор, привязанный к каждому изображению.При нажатии на изображение он должен судить, равен ли идентификатор, который вы нажали, идентификатору, который вы связали, и когда суждение верно, данные чередовались. Границу картинки сделать тернарным оператором суждения, а развилку в правом верхнем углу. (Должен сказать, что привязка данных - это хорошо).

код показывает, как показано ниже

wxml

    <scroll-view scroll-x="{{scrollx}}" class="list-pic">
        <view class="picture" wx:for="{{listPic}}" wx:key="{{index}}">
            <image class="{{id==item.id?'check':''}}" data-id="{{item.id}}" data-url="{{item.url}}" src="{{item.url}}" bindtap="showChoose"
            />
            <image wx:if="{{id==item.id}}" class="goupic" data-id="{{item.id}}" src="{{goupic}}" />
        </view>
    </scroll-view>

js

  showChoose(e){
    const id = e.currentTarget.dataset.id;
    const url = e.currentTarget.dataset.url;
    // console.log(e)
    this.setData({
      titlePic: url,
      id:id
    })
  }

  • Составление списков покупок и истории покупок

визуализация

Выбор продуктов в корзине и переключение приведенных выше изображений на самом деле похожи, привязка значения для определения того, какой продукт вы нажали, и изменение данных текущего продукта, вам нужно только судить

wx:if="{{item.num!=0 }}"

Можно добиться того, чтобы при количестве равном 0 знак минус и количество исчезали одновременно.

Это очень просто? Код структуры выглядит следующим образом:

 <view class="starbucks-list" wx:for="{{starbucksList}}" wx:key="{{index}}">
        <image bindtap="checkDrink" data-imgnum="{{item.imgnum}}" class="drinkImg" src="{{item.url}}" />
        <text class="description">{{item.name}}</text>
        <text class="price">¥{{item.price}}</text>

        <view class="addNum" bindtap="addNumber" data-index="{{index}}" data-status="{{item.status}}">

            <image wx:if="{{item.num!=0}}" src="{{delNum1}}" />
            <image wx:else="" src="{{addNum}}" />
        </view>
        <view wx:if="{{item.num!=0 }}" data-index="{{index}}" class="delNum {{item.num==0?'out':''}}" bindtap="delNumber"
            data-status="{{item.status}}">
            <image src="{{delNum}}" />
        </view>

        <text wx:if="{{item.num!=0 }}" class="listNum {{item.num==0?'out':''}}">{{starbucksList[index].num}}</text>

        <view wx:if="{{item.num!=0 }}" class="xiabiao {{item.num==0?'out':''}}"></view>
    </view>

Но есть еще одна трудность, которая меня давно беспокоит, а именноStorage, потому что историю покупок нужно сохранять локально после успешной покупки.В начале моей идеей было использовать индекс кликнутого товара как ключ при нажатии на каждый плюсик, а потом хранить в нем какую-то информацию. Таким образом, каждый ключ является динамическим, и мы можем получать данные, пока находим ключ на следующей странице. Однако из-за скачка страницы я пробовал много способов щелкнуть индекс продукта, прежде чем найти его в интерфейсе истории. Поэтому я сдался (вы можете пообщаться со мной в частном порядке, если у вас есть решение).

Этот путь не работает, и я должен найти другой путь, поэтому я подумал использовать для его решения массив, и каждый продукт по умолчанию занимает позицию в массиве. Отмечаются следующие метки, которые помещаются в массив в соответствии с индексом каждого выбранного элемента. Затем возникает ошибка: когда у вас есть невыбранные товары, позиция, занимаемая массивом для вас, по умолчанию не определена, но когда вы зацикливаете массив с помощью wx: for в истории, undefined также будет занимать сетку, что приведет к тому, что ваш wxml появляться вопрос. Решение состоит в том, чтобы использовать метод split() массива для удаления пустых.

 onLoad: function (options) {
    const historyList = this.data.historyList
    var that = this
    wx.getStorage({
      //获取数据的key
      key: "key",
      success: function (res) {
        // console.log(res)
        for (let i = 0; i < res.data.length; i++) {
          historyList[i] = res.data[i]
        }
        for (let i = 0; i < historyList.length; i++) {
          if (historyList[i] == null) {
            historyList.splice(i, 1);
            i = i - 1; // i - 1 ,因为空元素在数组下标 2 位置,删除空之后,后面的元素要向前补位,
            // 这样才能真正去掉空元素,觉得这句可以删掉的连续为空试试,然后思考其中逻辑
            // console.log(historyList);
          }
        }
       
        that.setData({
          historyList,
          hasHistory:true,
        })       
      
      }
    })

  • интерфейс сведений о продукте

  • Хранить детали и компоненты карты

Список магазинов используетсяAPI карты Tencent

Карта API является очень практичным компонентом. Интерфейс поиска по ключевым словам используется здесь для прямого запроса ближайших магазинов Starbucks. Вы также можете выбрать длинный адрес и короткий адрес. По сути, у вас есть все данные, которые вы хотите, которые удобнее. Должна быть волна Amway.

 qqmapsdk.search({
      keyword: '星巴克',
      address_format: 'short',
      page_size: 20,
      success: (res) => {
      },
      fail: function (res) {
      },
      complete: function (res) {
      }

По поводу всплывающего слоя на карте, я думал, что это решается простым добавлением wx:if к фиксированному, он хорошо отображался в средстве разработки, но когда я протестировал его на реальной машине, я был ошарашен. , А как насчет моего всплывающего слоя? Внимательно изучив документацию, я обнаружил, что уровень карты самый высокий и ничем не может быть покрыт. Нашел обложку после просмотра документации. Ящик, который можно разместить над картой

Pop-up анимация — это анимационный компонент и анимационный эффект, созданный вами самостоятельно.

checkImg(e) {
    var that = this;
    // 创建一个动画实例
    var animation = wx.createAnimation({
      // 动画持续时间
      duration: 500,
      // 定义动画效果,当前是匀速
      timingFunction: 'linear'
    })
    // 将该变量赋值给当前动画
    that.animation = animation
    // 先在y轴偏移,然后用step()完成一个动画
    animation.translateY(400).step()
    // 用setData改变当前动画
    that.setData({
      // 通过export()方法导出数据
      animationData: animation.export(),
      // 改变view里面的Wx:if
      hascheck: true
    })
    // 设置setTimeout来改变y轴偏移量,实现有感觉的滑动
    setTimeout(function () {
      animation.translateY(0).step()
      that.setData({
        animationData: animation.export()
      })
    }, 100)
  },

резюме

В этой небольшой программе еще много функций, которые не были реализованы, и есть некоторые ошибки, которые еще не решены, например, запланированные маршруты двух мест.polylineЭто не должна быть прямая линия, и некоторые функции, такие как просмотр улиц, нуждаются в совершенствовании. Детали могут определить успех или неудачу. Все еще необходимо постоянно улучшать некоторые детали, чтобы делать хорошие работы. Я буду продолжать улучшать эту небольшую программу. , если хотите, вы можете следовать за мной, мы можем общаться и учиться вместе, и я надеюсь, что вы можете дать мне несколько ценных мнений

мой гитхаб:github.com/liaoruochen

Это первый раз, когда пишу статью.Возможно, проект не очень хорошо написан, и выражение не так ясно.Я надеюсь, что все могут терпеть меня.Если вам это нравится, вы можете дать мне свою заботу, спасибо!