微信小程序-如何点击marker触发事件更改图标icon

这篇具有很好参考价值的文章主要介绍了微信小程序-如何点击marker触发事件更改图标icon。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

最近在做课设,要求实现一个找附近停车位的功能
微信小程序map组件的marker iconpath怎么设置,微信小程序,微信小程序,小程序,前端
绿色marker为空闲车位,红色marker为占用车位,现要求实现点击绿色marker,进行上锁操作,并让绿色锁改为红色锁。

如下图所示:
微信小程序map组件的marker iconpath怎么设置,微信小程序,微信小程序,小程序,前端
点击中间绿色锁,跳出弹窗,点击关锁,则锁变红色。
微信小程序map组件的marker iconpath怎么设置,微信小程序,微信小程序,小程序,前端
倘若点击红色锁的关锁,则会提示 “该车位已被占用,无法进行该操作”

1、触发事件更改marker图标icon

思路:点击对应marker触发handleMarkerTap()函数,该函数会根据所点击的marker的id,找到对应marker,并将绿色锁的图片地址改成红色锁的图片地址,从而达到更改icon的效果。

而为了辨别车位是否处于占用状态,我们还要在marker里添加title这一属性(取决于你自己,可以是title,可以是used等等)。若没被占用,则title=“空闲”,否则title=“占用”。
微信小程序map组件的marker iconpath怎么设置,微信小程序,微信小程序,小程序,前端

2、实现步骤

2.1、wxml页面

重点就是在map组件里加上 bindmarkertap=“handleMarkerTap” 这一行属性,这样我们在点击map组件里的marker的时候,就会触发 handleMarkerTap() 函数。

<map id="map" style="width:100vw; height:100vh"  
markers="{{markers}}" latitude="{{latitude}}" 
longitude="{{longitude}}" scale="{{scale}}" 
bindmarkertap="handleMarkerTap" >
</map>

<mp-halfScreenDialog show="{{showDialog}}">
    <view slot="title">南京市-胜太西路</view>
    <view slot="desc">{{currentMarker.id}} 号停车位</view>
    <view slot="desc">当前状态: <text style="color:{{currentMarker.title=='空闲'?'green':'red'}}">{{currentMarker.title}}</text></view>
    <view slot="desc">费用: <text style="color:red">2/15min </text></view>

    <view slot="footer" >
        <button type="primary" class="weui-btn" bindtap="Unlock" data-id="{{currentMarker.id}}">关锁</button>
        <button type="primary" class="weui-btn" bindtap="Navigate">导航</button>
    </view>
</mp-halfScreenDialog>

其中 mp-halfScreenDialog组件需要weui库才能使用,这里仅作思路演示,你可以根据实际情况将方法移植到你的代码里。

2.2、js页面代码

首先,handleMarkerTap函数触发的时候,前端会顺便把用户点击的marker信息传入到handleMarkerTap的形参e里面。然后我们就可以利用find函数,根据用户点击的markerId,找到this.data.markers数组里对应的marker,有了这个marker,我们才能对其进行图片修改操作。

handleMarkerTap(e){
    const marker = this.data.markers.find(item => item.id == e.markerId);
    marker && this.setData({
        currentMarker: marker,	//记录用户点击的marker
        showDialog: true		//点击marker后跳出关锁弹窗
    })
  },

同时,在我们点击marker后,代码会将showDialog由false改为true,这样前端页面的弹窗就会展示出来,然后我们才可以点击弹窗里的关锁按钮进行车位上锁。

这里 handleMarkerTap() 的主要功能是,根据用户点击的marker,找到对应marker车位信息,并将车位信息显示给用户看,还没有进行icon变换的操作。

微信小程序map组件的marker iconpath怎么设置,微信小程序,微信小程序,小程序,前端

只有当用户点击了关锁按钮,才会触发Unlock函数,将绿色车位icon改成红色车位icon。

在前端代码中,我们早在关锁按钮button里就将marker的id传入到了Unlock函数形参里:

<button bindtap="Unlock" data-id="{{currentMarker.id}}"
>关锁</button> //currentMarker.id即为上一步你所点击并储存起来的markerId

这里 data-id=“{{currentMarker.id}}” 作用是给Unlock(e)函数传参,即相当于 e.currentTarget.dataset.id={{currentMarker.id}} 。这样我们就可以从形参e里拿到拿到用户点击的marker的Id(即currentMarker.id)。
拿到Id后,就可以对对应id的marker的图像iconpath进行修改,即可达到更换icon的效果。

Unlock(e){

    const marker = this.data.markers.find(item => item.id == e.currentTarget.dataset.id);
	//这里和上面总共要find两次的原因是,第一次是find对应marker用为了拿到车位信息并展示给用户看
	//这一次的find是为了修改图片icon颜色,两次find的目的不同,看你自己需要了
    const Full = "../../images/lock1.png" //占用车位 红色锁图片
    const Empty = "../../images/lock2.png" //空闲车位 绿色锁图片
    
    if(marker.title == "空闲"){//空闲状态才可以关锁
        let temp_marker_title = "markers[" + (marker.id-1) + "].title"
        let temp_marker_iconPath = "markers[" +(marker.id-1) + "].iconPath"
        //marker.id-1是因为markers数组是从0开始,这里因人而异,只要能成功修改对应marker就行
        
        this.setData({
            [temp_marker_title] : "占用",
            [temp_marker_iconPath] : Full//改成红色锁的图片地址
        })
    }
    else{
        //如果是占用状态,则禁止开锁
        console.log("已经被占用,无法进行该操作")
    }
  },

总结

至此,我们已经实现了通过点击按钮,触发函数,函数里更改marker的icon地址,从而达到更改marker图标icon的效果。

其实仍然有许多可以改进之处,比如在Unlock(e)函数里直接通过this.data.currentMarker.id获取id即可,可以不用button传参,这里也只是给一些初学者了解一下button传参的方法。文章来源地址https://www.toymoban.com/news/detail-778318.html

到了这里,关于微信小程序-如何点击marker触发事件更改图标icon的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序长按与单击事件触发

    方式一 wxml 片段 js 片段 解析 tap 触摸事件采用 catch 阻止事件冒泡 1.5.0之后支持 longpress 事件,手指触摸后,超过350ms再离开,如果指定了事件回调函数并触发了这个事件,tap事件将不被触发 方式二(不推荐) longtap 事件,但在触发时会同时触发单击事件,需配合 touchstart 和

    2024年02月12日
    浏览(74)
  • 微信小程序之点击事件

    微信小程序中常用的点击事件主要是  tap ,但除此之外还有其他的触摸类事件,用于不同的交互场景。以下是一些常见的点击和触摸相关的事件及其区别: 3.1.冒泡事件: 冒泡(Bubble)是一种事件传播机制,在Web开发领域和微信小程序中广泛存在。当用户在一个页面元素上触

    2024年04月23日
    浏览(30)
  • 【微信小程序】通过绑定点击事件来实现点击交互

    在微信小程序中,可以通过绑定点击事件来实现点击交互。以下是点击事件的实现步骤: 在WXML文件中,找到需要绑定点击事件的元素,例如按钮、图片等。 在该元素上添加 bindtap 属性,并指定一个对应的事件处理函数,例如: 在对应的页面或组件的JS文件中,定义事件处理

    2024年02月14日
    浏览(35)
  • 微信小程序点击事件bindtap传参

    微信小程序bindtap点击事件如何传参 wxml页面 JS 点击后会有以下提示: bindtap在传参时需要用到data-xxx来进行传递参数,如下: wxml页面 JS

    2024年04月28日
    浏览(27)
  • 【微信小程序】父子组件的创建、通信与事件触发;组件生命周期

    关于微信小程序中父子组件的创建、传值,以及涉及到的组件生命周期。 组件的使用可以 提高开发效率 并 确保功能在各个页面上的应用和修改的一致性 。 例如,对于一些重复的功能,比如顶部导航栏或评论区,将其提炼成组件后,我们只需要在不同的页面中引用该组件,

    2024年02月03日
    浏览(36)
  • 微信小程序 button按钮怎么触发事件? bindtap语法怎么使用?

    在前端网页中我们需要触发一个事件如果按钮点击后调用函数,文本、图片、链接被点击后调用一个函数一个事件,我们都知道用click,可是微信小程序中的click是不存在的, 他怎么才能和网页中一样的使用click的呢? 这时候有人肯定会问,我不是来学习click的怎么教我bindt

    2024年01月16日
    浏览(37)
  • 微信小程序点击事件(bindtap)传递参数

    小程序在组件上绑定事件后,传递参数的方式不同于前端开发其他场景中直接加参数的方式,小程序在参数的传递时,采用事件对象的自定义属性的方式,具体实现如下: wxml: view bindtap=\\\"goTo\\\" data-index =\\\"{{item.index}}\\\"点击事件传参/view js中: goTo: function(e){     // 传递的参数    

    2024年02月12日
    浏览(43)
  • 微信小程序通过点击事件传参(data-)

    大家都知道在 vue 中,我们可以直接在点击事件中放入传递的参数进行传参;然而微信小程序中并不适用这样的写法,但是微信小程序可以通过自定义属性从而绑定参数使用。 微信小程序可以通过直接写 data-index=\\\"1\\\" 进行数据的绑定 ,利用 bindtap 点击事件执行函数从而获取到

    2024年02月11日
    浏览(43)
  • 微信小程序:表格中更改输入框的值,实时获取表格全部数据,点击按钮更改数据库指定项数据

    样例: 样式展示 数据库中原始第一条数据  修改表格第一行的数量: 数据库结果     核心代码 wxml ①wx:for:执行循环将数组数据展示出来 ②在某一单元格加上input样式 ③在input中绑定:文本框改变事件,并且绑定data-index便于知道改变的具体是哪一行的数据 wxss js ①变更in

    2024年02月16日
    浏览(39)
  • 微信小程序一对多个页面间传递数据进行通信,事件触发的实现方法

    在有些场景下,使用组件间通信或者组件和页面间通信并不可行。比如我需要只有一个websocket实例,并且需要向多个页面传递我接收到的消息。 下面的方法是一个页面向其它页面(触发事件)传递数据,其它页面也可以向这个页面传递数据。也就是可以互相传递。 缺点是,

    2024年02月07日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包