JS操作SVG模拟水滴分离、融合效果

很多的App应用下拉刷新使用拉拽圆的动态效果来表示下拉过程,很富有表现性;还有QQ的消除红点的过程等,都使用到了这种类似水滴融合的效果。

这种变化的实质是绘制两个圆,然后在两个圆之间利用贝塞尔曲线来描绘弧形,在两个圆的距离随着拖动发生改变时,通过计算数学公式动态地更改曲线的弧度,从而使整个变化过程看起来更加协调。

下面粗略模拟一下这个过程,如果想要更加完美的表现,需要经过精确的计算得出更准确的公式,这里之后补充。

首先我们绘制一下变化过程中的几个过程,如下图:

这里写图片描述

两个圆之间的粘合部分需要使用二次贝塞尔曲线来绘制。其中弧线的两个端点值和一个中间点,目前使用竖直线和圆的切线交点和两个圆心中点的水平线上偏移一定值的点来简单替代,当然效果不够完美,有待后续优化。例如第二个图的路径写法如下:

<g transform="translate(100,0)">
        <circle cx="100" cy="100" r="30" fill="#f59393"></circle>
        <circle cx="100" cy="150" r="30" fill="#f59393"></circle>
        <path d="M70,100 Q80,125 70,150 L130,150 Q120,125 130,100 L70,100" fill="#f59393" stroke="black"></path>
    </g>

在图中标志下路径:

这里写图片描述

通过模拟上面几个大致的变化过程,得出粗略的公式,绑定点击事件,实现分离、融合效果:

这里写图片描述

下面是代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>SVG模拟水滴分离、融合效果</title>
</head>
<body>
    <svg width="800" height="400" id="svg">
    <g transform="translate(0,0)">
        <circle cx="100" cy="110" r="40" fill="#f59393"></circle>
    </g>
    <g transform="translate(100,0)">
        <circle cx="100" cy="100" r=
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在ArcGIS JavaScript API中使用SVG(可缩放矢量图形)可以实现管线的流向效果。通过使用SVG的路径图形元素和相应的样式属性,我们可以在地图上绘制出管线的流向。 首先,我们需要获取到管线的起点和终点的坐标信息。可以通过查询或者其它方式获得这些信息,然后将其转换为地理坐标系下的坐标。 在绘制SVG元素之前,我们需要创建一个SVG容器,并将其添加到地图上合适的位置。可以使用ArcGIS JavaScript API中的GraphicsLayer来实现这一点。 接下来,我们可以使用SVG的路径元素来绘制管线。路径元素的d属性可以定义路径的形状,使用起点和终点坐标信息来定义路径的起始点和终止点。同时,我们可以设置路径元素的样式属性来定义路径的颜色、线宽等。 为了实现流向效果,可以将路径元素添加到地图上的SVG容器中。然后,使用动画效果或者定时器来改变路径的显示效果,使其呈现流向的效果。可以通过改变路径元素的stroke-dasharray属性来实现这一点。 最后,通过将SVG容器添加到地图上的GraphicsLayer中,我们可以将绘制的管线显示在地图上。同时,可以通过添加事件监听器来实现与管线交互,例如点击、悬停等。 总之,使用ArcGIS JavaScript API中的SVG功能,我们可以实现管线的流向效果。这样可以使用户更加直观地理解和分析数据,提高GIS应用的效果和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值