636 字
3 分钟
地图选点与瀑布流实践
核心交互顿悟
- 交互模型:地图选点的逆向思维: 通常可能会将选点视为“点击地图目标坐标以转移图钉”。实际上,目前最主流且流畅的体验是**“固定中心图钉,移动地图底图”**。即屏幕中心的交互反馈点始终如一,用户移动的是底层的数据映射图层。
- 布局模型:瀑布流的本质渲染调度:
相较于依托复杂的 CSS 栅格,利用 JS 维护并行数组列去分配图片资源更加具备生产力与适应性。结合
widthFix或者宽带限制进行高度自适应延展,即可在移动端上建立流畅的渲染模型。
技术内化复现解析
🗺️ 技能一:拖动地图选址(Map Dragging)
这是一个“配置+布局+逻辑”的组合拳。
1. 权限配置(门票)
在 app.json 中必须声明,否则 wx.getLocation 直接报错。
"permission": { "scope.userLocation": { "desc": "用于定位" } },"requiredPrivateInfos": ["getLocation"]2. 布局技巧(定海神针) 核心是层叠布局。
- 容器:
position: relative。 - 地图:铺满容器。
- 图钉:
position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);。 - 动画:监听拖动状态,拖动时
translate Y向上位移更多(抬起),停止时复位(扎下)。
3. 核心逻辑(取值) 不要在拖动过程中疯狂更新,只在停下那一刻取值。
- 监听:
bindregionchange事件。 - 判断:
e.type === 'end'且e.causedBy === 'drag'。 - 获取:调用
mapCtx.getCenterLocation()拿到当前地图中心的经纬度。
🌊 技能二:相册瀑布流(Waterfall Layout)
我们采用了JS分列 + Flex布局的方案,比纯 CSS 更可控。
1. 核心原理(发牌算法) 准备 3 个数组(左、中、右),遍历图片列表,按顺序轮询分配。
// 伪代码:Round-Robin 分配images.forEach((img, index) => { if (index % 3 === 0) leftList.push(img); else if (index % 3 === 1) centerList.push(img); else rightList.push(img);});2. 关键属性(自适应高度)
在 WXML 中,图片组件必须设置 mode="widthFix"。
这样我们只需要用 CSS 固定每列的宽度(例如 32%),图片高度就会根据原图比例自动撑开,形成错落有致的效果。
总结
看似复杂的端上交互模式脱离表现层后,实际上依然是朴素的结构化算法支撑:地图拖曳是相对平移下的监听映射,瀑布流是列阵集合的任务调度分发。从工程角度建立模型从而实现降维解法,是前端走向进阶所需要掌握的重要能力。
部分信息可能已经过时




