maptalks结合gsap添加具有高度的marker,并添加上下移动动画

由于当前版本的maptalks(rc17)尚不支持对marker高度的动态修改,所以结合map源码魔改出了这个方案
还有一种方案是使用maptalks.three来生成文字悬浮效果,但是那种方法出来的效果不是很清晰

1.引入模块

import { Map, VectorLayer, Marker, Geometry, MultiPolygon } from 'maptalks'
import gsap from 'gsap'

2.初始化图层并添加点

const pointWithAltitudeLayer = new VectorLayer('vectorWithAltitude',null,{
      enableAltitude: true,
      altitudeProperty: 'altitude'
    })
pointWithAltitudeLayer.addTo(map)
const popupIcon = require('../../../assets/images/markers/tips.png')
const highPoint = new Marker([x, y], {
    id: 'highPoint_' + 1,
    properties: {
      type: 'flyPoint',
      name: 'flyPoint_' + 1,
      altitude : 200 // 设置高度200
    },
    symbol: {
      'markerFile': popupIcon, // 这里是图片的路径,具体可参考maptalks API文档来自定义,可添加图片以及文字
      'markerWidth': 150, // marker的宽度和高度需要根据图片来调试
      'markerHeight': 50,
      'markerDx': 0,
      'markerDy': 0,
      'markerOpacity': 1
    }
  })
   highPoint.addTo(pointWithAltitudeLayer)

3.为marker添加动画

// 添加悬浮动画
  addAnimation(map,highPoint)
  
  const addAnimation = (map, marker) => {
  const properties = marker.getProperties()
  //调用gsap来改变marker的altitude
  gsap.to(marker.properties, {
    altitude: 120, // 上下移动
    duration: 2, // 2s
    repeat: -1, // 无限重复
    yoyo: true, // 添加往返执行
    onUpdate: ()=> { // altitude更新时调用,,
    // marker.setProperties(properties) //无效
    //通过动画改变altitude属性,无法实时更新marker的高度,只有在移动,缩放,拖拽地图时才能看到效果,所以这里每次更新时,手动调用map的私有方法
      
    },
  })
}

desktop 2023-01-16 11-04-23

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GSAP(GreenSock Animation Platform)是一个非常强大的JS动画库,可以用于创建各种动画效果。其中,gsap.to可以用来创建进度条动画。 在使用gsap.to创建进度条动画时,我们可以先设置一个初始状态的值,然后通过指定目标值和一定的时间来实现动画效果。具体来说,我们可以使用gsap.to来修改进度条的宽度或者其他属性,从而实现动态变化的效果。 要创建一个进度条动画,首先需要确保你已经引入了GSAP库并熟悉其基本用法。然后,你可以选择一个HTML元素作为进度条的容器,并设置它的初始样式,比如宽度为0。接下来,你可以使用gsap.to来改变进度条的宽度,设置目标值为100%(或者你想要的值),并指定一个适当的持续时间。在动画完成后,进度条就会以一个平滑的动画效果达到目标值。 总结起来,使用GSAP的gsap.to方法可以很方便地创建进度条动画。你可以设置初始状态和目标值,并通过指定持续时间来控制动画的速度。这样,你就可以实现一个漂亮而流畅的进度条动画效果。 需要注意的是,GSAP还有其他的方法和插件可以进一步扩展动画效果,比如TweenLite和CSSPlugin等。TweenLite是GSAP的核心,用于创建基本动画,而CSSPlugin则用于实现DOM元素的动画效果。你可以根据自己的需求选择适合的方法和插件来增强你的进度条动画效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【前端实例代码】使用 HTML&& CSS&&JavaScript实现进度条时间特效动画效果 |前端开发 网页制作 基础入门...](https://blog.csdn.net/qq_22182989/article/details/126356023)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值