首页 > 小程序教程 > 微信小程序输入城市名称gps定位查询页设计制作开发教程

微信小程序输入城市名称gps定位查询页设计制作开发教程

上一篇 下一篇
本文给大家带来的是微信小程序输入城市名称gps定位查询页设计制作开发教程,制作好以后效果图如下:
一、wxml页面代码如下:
<!--pages/location/select-city/select-city.wxml-->
<view class="container">
  <view class="page-session page-session-spacing">
    <view class="search-session">
      <icon type="search" size="16"></icon>
      <block wx:if="{{!searching}}">
        <text class="search-holder" bindtap="bindSearch">输入城市名称查询</text>
      </block>
      <block wx:elif="{{searching}}">
        <input class="search-input" placeholder-class="search-placeholder" value="" placeholder="输入城市名称查询" focus="true" bindinput="handleInput" bindconfirm="handleConfirm" bindblur="handleBlur" />
        <text class="cancel" bindtap="handleCancel">取消</text>
      </block>
    </view>
  </view>
  <block wx:if="{{searching}}">
    <view class="select-city-body {{searching ? 'select-city-body-cover' :'select-city-body-hidden'}}" catchtap="handleCancel">
    </view>
    <block wx:if="{{searchLetterList.length > 0}}">
      <view class="city-list-wrapper">
        <view class="city-list ">
          <block wx:for="{{searchLetterList}}" wx:for-item="letter">
            <text class="list-title">{{letter}}</text>
            <view class="list-content">
              <block wx:for="{{searchCityList[letter]}}" wx:for-item="city">
                <text class="city-block" data-id="{{city.id}}" data-name="{{city.name}}" data-uid="{{city.uid}}" bindtap="bindCityTap">{{city.name}}</text>
              </block>
            </view>
          </block>
        </view>
      </view>
    </block>
    <block wx:if="{{showSearchNone}}">
      <view class="search-none">这里是空哒~</view>
    </block>
  </block>
  <text class="gps-title">GPS定位城市</text>
  <view class="gps-city-content">
    <text class="gps-loc" data-id="{{gpsCity.id}}" data-name="{{gpsCity.name}}" data-uid="{{gpsCity.uid}}" bindtap="bindCityTap">{{gpsCity.name}}</text>
  </view>
  <text class="hot-city-title">热门城市</text>
  <view class="hot-city">
    <view class="hot-city-content">
      <block wx:for="{{hotCity}}" wx:for-item="city">
        <text class="city-box" data-id="{{city.id}}" data-name="{{city.name}}" data-uid="{{city.uid}}" bindtap="bindCityTap">{{city.name}}</text>
      </block>
    </view>
  </view>
  <view class="city-list">
    <block wx:for="{{letterList}}" wx:for-item="letter">
      <text class="list-title">{{letter}}</text>
      <view class="list-content">
        <block wx:for="{{cityList[letter]}}" wx:for-item="city">
          <text class="city-block" data-id="{{city.id}}" data-name="{{city.name}}" data-uid="{{city.uid}}" bindtap="bindCityTap">{{city.name}}</text>
        </block>
      </view>
    </block>
  </view>
</view>
 
二、wxss样式文件代码如下:
/* pages/location/select-city/select-city.wxss */

.page-session {
  width: 100%;
  white-space: nowrap;
  border-width: 0px 0px 0px 0px;
  border-style: solid;
  border-color: #e6e6e6;
  background: #fff;
}

.page-session-spacing {
  padding-bottom: 0rpx;
  margin-bottom: 0rpx;
}

.search-session {
  display: flex;
  flex-direction: row;
  align-items: center;
  align-self: center;
  padding: 12rpx 30rpx 12rpx 30rpx;
  box-sizing: border-box;
}

.search-session .search-holder {
  flex: 1;
  color: #9e9e9e;
  font-size: 28rpx;
  font-weight: 500;
  margin-left: 20rpx;
}

.search-session .search-input {
  flex: 1;
  color: #4a4a4a;
  font-weight: 500;
  font-size: 28rpx;
  margin-left: 20rpx;
}

.search-session .cancel {
  font-size: 28rpx;
  margin-left: 20rpx;
  padding: 6rpx 8rpx 6rpx 8rpx;
}

.select-city-body {
  width: 100%;
  background: #ccc;
  top: 86rpx;
  position: fixed;
  opacity: 0.3;
  z-index: 1;
}

.select-city-body-hidden {
  height: -2rpx;
}

.select-city-body-cover {
  height: 9999rpx;
}

.city-list-wrapper {
  position: fixed;
  top: 86rpx;
  background: #f8f8f8;
  width: 100%;
  height: 100%;
  opacity: 1;
  flex-grow: 1;
  z-index: 2;
}

.search-none {
  position: fixed;
  color: #4a4a4a;
  padding-top: 20rpx;
  font-size: 28rpx;
  top: 80rpx;
  background: #fff;
  width: 100%;
  height: 100%;
  text-align: center;
  opacity: 1;
  flex-grow: 1;
  z-index: 2;
}

.hot-city-content, .list-content {
  display: flex;
  flex-direction: column;
  padding: 0rpx 30rpx 0rpx 30rpx;
}

.list-content {
  background: #fff;
}

.gps-city-content {
  padding: 0rpx 30rpx 0rpx 30rpx;
}

.gps-title, .hot-city-title, .list-title {
  width: 100%;
  padding-left: 30rpx;
  padding-right: 30rpx;
  color: #9e9e9e;
  font-size: 26rpx;
  height: 56rpx;
  line-height: 56rpx;
}

.gps-loc, .city-box {
  display: inline-block;
  color: #4a4a4a;
  padding: 16rpx 70rpx 16rpx 70rpx;
  font-size: 28rpx;
  background: #fff;
}

.city-box {
  margin-bottom: 30rpx;
}

.hot-city-content {
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  margin-bottom: -30rpx;
}

.list-title {
  color: #9e9e9e;
  font-size: 26rpx;
}

.list-content {
  border-width: 1px 0px 1px 0px;
  border-style: solid;
  border-color: #e6e6e6;
}

.city-block {
  width: 100%;
  padding: 16rpx 0rpx 16rpx 0rpx;
  color: #4a4a4a;
  font-size: 28rpx;
  font-weight: 500;
  border-bottom: 1px solid #e6e6e6;
}

.city-block:last-child {
  border: 0px solid #e6e6e6;
}
三、js页面代码如下:
// pages/location/select-city/select-city.js
var app = getApp();
Page({
  data: {
    searching: false,
    showSearchNone: false,
    gpsCity: {},
    locs: [],
    searchLocs: undefined,
    city: undefined,
    hotCityUid: ["beijing", "shanghai", "guangzhou", "shenzhen", "chengdu", "nanjing", "wuhan", "hangzhou", "chongqing"],
    hotCity: [],
    letterList: [],
    cityList: {}
  },
  onLoad: function (options) {
    // 页面初始化 options为页面跳转所带来的参数
    var id = options.id;
    var uid = options.uid;
    var name = options.name;
    var gpsCity = {
      "id": id,
      "uid": uid,
      "name": name
    }
    var city = app.globalData.city;
    var locs = app.globalData.locs;
    this.setData({
      locs: locs, gpsCity: gpsCity
    });
    this.processCityListData(locs);
  },
  onReady: function () {
    // 页面渲染完成
  },
  onShow: function () {
    // 页面显示
  },
  onHide: function () {
    // 页面隐藏
  },
  onUnload: function () {
    // 页面关闭
  },
  /** 搜索城市 */
  bindSearch: function (event) {
    this.setData({ "searching": true });
  },
  /** 处理城市信息 */
  processCityListData: function (locs) {
    if (locs && typeof locs == "object") {
      // 提取热门城市
      var hotCity = this.data.hotCityUid.map(function (item, index, input) {
        return locs[item];
      });

      // 按字母顺序排序
      var keys = Object.keys(locs);
      keys.sort();
      // 提取所有城市并按首字母归类
      var cityList = {};
      var letterList = [];
      for (let idx in keys) {
        var key = keys[idx];
        var letter = key.substring(0, 1);
        var city = locs[key];
        if (!cityList[letter]) {
          cityList[letter] = [];
          letterList.push(letter);
        }
        cityList[letter].push(city);
      }
      console.log("cityList: " + cityList);
      this.setData({
        "hotCity": hotCity, "letterList": letterList, "cityList": cityList
      });
    }
  },
  /** 选择城市 */
  bindCityTap: function (event) {
    var locId = event.currentTarget.dataset.id;
    var city = event.currentTarget.dataset.name;
    var cityUid = event.currentTarget.dataset.uid;
    var currentLoc = {
      "id": locId, "name": city, "uid": cityUid
    };
    wx.navigateBack({
      delta: 1, // 回退前 delta(默认为1) 页面
      success: function (res) {
        app.globalData.reflesh = true;
        app.globalData.locId = locId;
        app.globalData.city = city;
        app.globalData.cityUid = cityUid;
        app.globalData.currentLoc = currentLoc;
      }
    });
  },
  /** 点击完成按钮是触发 */
  handleConfirm: function (event) {
    console.log("handleConfirm");
  },
  /** 搜索框失去焦点是触发 */
  handleBlur: function (event) {
    console.log("bindblur");
  },
  /** 取消搜索 */
  handleCancel: function (event) {
    this.setData({
      "searching": false
    });
  },
  handleInput: function (event) {
    var value = event.detail.value;
    console.log("value: " + value);
    var searchLocs = {};
    var searchCityList = {};
    var searchLetterList = [];
    var readyData = { "searchLocs": searchLocs, "searchCityList": searchCityList, "searchLetterList": searchLetterList, "showSearchNone": false };
    if (value == "") {
      this.setData(readyData);
      return;
    }

    var locKeys = Object.keys(this.data.locs);
    for (let idx in locKeys) {
      var key = locKeys[idx];
      if (key.indexOf(value) != -1) {
        searchLocs[key] = this.data.locs[key];
      } else if (this.data.locs[key].name.indexOf(value) != -1) {
        (searchLocs[key] = this.data.locs[key])
      }
    }

    // 按字母顺序排序
    var keys = Object.keys(searchLocs);

    var keyLength = keys.length;

    if (keyLength == 0) {
      readyData["showSearchNone"] = true;
      this.setData(readyData);
      return;
    }

    keys.sort();
    // 提取所有城市并按首字母归类
    for (let idx in keys) {
      var key = keys[idx];
      var letter = key.substring(0, 1);
      var city = searchLocs[key];
      if (!searchCityList[letter]) {
        searchCityList[letter] = [];
        searchLetterList.push(letter);
      }
      searchCityList[letter].push(city);
    }

    readyData["searchLocs"] = searchLocs;
    readyData["searchCityList"] = searchCityList;
    readyData["searchLetterList"] = searchLetterList;
    this.setData(readyData);
  }
})

模板简介:该模板名称为【微信小程序输入城市名称gps定位查询页设计制作开发教程】,大小是,文档格式为.,推荐使用打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【小程序教程】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 19,564次
  • 使用软件
  • 文件格式
  • 文件大小
  • 上传时间 08-01
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
响应式 html5 自适应 企业网站 微信公众平台 微信文章 微信素材 微信图片 微信模板 单页式简历模板
您可能会喜欢的其他模板