美文网首页
三章-25-心形图层遮罩效果

三章-25-心形图层遮罩效果

作者: 彩云飘过 | 来源:发表于2020-04-20 17:51 被阅读0次

本文基于腾讯课堂老胡的课《跟我学Openlayers--基础实例详解》做的学习笔记,使用的openlayers 5.3.x api。

源码 见 1025.html ,对应的 官网示例 https://openlayers.org/en/latest/apidoc/module-ol_render_Event-RenderEvent.html#context

image.png image.png
<!DOCTYPE html>
<html>
  <head>
    <title>心形图层遮罩效果</title>
    <link rel="stylesheet" href="../include/ol.css" type="text/css">
    <script src="../include/ol.js"></script>

  </head>
  <body>
     <div id="map" class="map"></div>

    <script>
     var osm = new ol.layer.Tile({
        source: new ol.source.OSM()
      });

      var map = new ol.Map({
        layers: [osm],
        target: 'map',
        view: new ol.View({
          center: [0, 0],
          zoom: 2
        })
      });

      //precompose 在层渲染之前触发。事件对象将没有上下文集。
      osm.on('precompose', function(event) {
        
        var ctx = event.context; //获取到canvas的上下文,该实例会用到canvas绘图的基础知识
        
        ctx.save(); //保存现场;若不保存,会一次次绘制心形,造成毛边

        var pixelRatio = event.frameState.pixelRatio; //像素密度
        var size = map.getSize(); //地图尺寸
        //canvas初始绘图位置是左上角,需要把绘制位置移动到屏幕的某一点位置再开始绘图
        // 平移
        ctx.translate(size[0] / 2 * pixelRatio, size[1] / 2 * pixelRatio);
        //缩放
        ctx.scale(3 * pixelRatio, 3 * pixelRatio);
        //平移
       ctx.translate(-75, -80);
       
       //绘制心形路径
        ctx.beginPath();
        ctx.moveTo(75, 40);
        ctx.bezierCurveTo(75, 37, 70, 25, 50, 25);
        ctx.bezierCurveTo(20, 25, 20, 62.5, 20, 62.5);
        ctx.bezierCurveTo(20, 80, 40, 102, 75, 120);
        ctx.bezierCurveTo(110, 102, 130, 80, 130, 62.5);
        ctx.bezierCurveTo(130, 62.5, 130, 25, 100, 25);
        ctx.bezierCurveTo(85, 25, 75, 37, 75, 40);
        
        ctx.clip(); //将canvas所有内容显示在绘制的边界中间
        ctx.translate(75, 80);
        ctx.scale(1 / 3 / pixelRatio, 1 / 3 / pixelRatio);
        ctx.translate(-size[0] / 2 * pixelRatio, -size[1] / 2 * pixelRatio);
       });

      //postcompose 在所有层渲染后触发。事件对象将没有上下文集。
      osm.on('postcompose', function(event) {
        var ctx = event.context;
         ctx.restore(); //恢复保存的上下文现场
      });
    </script>
  </body>
</html>

相关文章

  • 三章-25-心形图层遮罩效果

    本文基于腾讯课堂老胡的课《跟我学Openlayers--基础实例详解》做的学习笔记,使用的openlayers 5...

  • Day4——遮罩动画

    一、遮罩动画是什么?有点像两个图层,本来要显现的图层上面被遮上了一层,从上面一个图层过渡到被遮罩的图层,通过某种形...

  • 图层蒙版&通道

    一、图层蒙版 功能:遮罩一部分效果,保留一部分效果。使用范围:背景图层,像素图层,形状图层,文字图层,图层组。1、...

  • CALayer的mask属性简介

    mask就是PS中的遮罩; 遮罩层必须至少有两个图层,上面的一个图层为“遮罩层”,下面的称“被遮罩层”;这两个图层...

  • iOS - CALayer的mask属性学习

    mask就是PS中的遮罩;遮罩层必须至少有两个图层,上面的一个图层为“遮罩层”,下面的称“被遮罩层”;这两个图层中...

  • css遮罩

    简介 1 .有一张原始图片,在他之上加遮罩。最后效果就是原始图片只会显示遮罩图片非透明的地方。图层的关系 2 .如...

  • 【AE教程】点赞

    整个动画效果会用到下面这 4 个功能,分别是 修剪路径,效果与预设-设置遮罩,调整图层,运动模糊,下面会详细的功能...

  • AUTOCAD

    标注 填充 捕捉填充 文字背景遮罩 关联 图层LA——LAYER(图层管理器)LAYISO——图层隔离LAYVPI...

  • 画地为Mask,随心所欲的高效遮罩组件[Unity](转)

    画地为Mask,随心所欲的高效遮罩组件[Unity] 组件效果 可以看到无论Mask形状是凸边形还是复杂的凹边形,...

  • 零零碎碎的知识点

    1.圆角,图层遮罩,阴影或者是图层光栅化(GPU离屏渲染)会强制Core Animation提前渲染图层的离屏绘制...

网友评论

      本文标题:三章-25-心形图层遮罩效果

      本文链接:https://www.haomeiwen.com/subject/dxoquhtx.html