openlayers 卷帘

注意 卷帘元素为map子集  

  <div id="map" ref="map" style="width: 100%;height:100%;background: transparent;">

      <div id="swipeContainer" v-show="openSwipe">

        <img class="handle" draggable="false"  src="../../assets//hldsj_img/grass/silder.png" alt="">

      </div>

    </div>

-------------------------------------------------

打开需要展示卷帘页面是时初始化的代码

   setTimeout(() => {

          var swipe = document.getElementById("swipeContainer");

          var obj = {};

          swipe.onmousedown = function (event) {

            var e = event || window.event;

            // 鼠标点击元素那一刻相对于元素左侧边框的距离=点击时的位置相对于浏览器最左边的距离-物体左边框相对于浏览器最左边的距离

            obj.diffX = e.clientX - this.offsetLeft;

            document.onmousemove = function (event) {

              var e = event || window.event;

              var moveX = e.clientX - obj.diffX;

              if (moveX < 0) {

                moveX = 0

              } else if (moveX > window.innerWidth - swipe.offsetWidth) {

                moveX = window.innerWidth - swipe.offsetWidth

              }

              swipe.style.left = moveX + 'px';

              //重新渲染图层

              that.mapObject.render();

            };

            document.onmouseup = function () {

              this.onmousemove = null;

              this.onmouseup = null;

            }

          };

        }, 100)

----------------------------------------------------------

设置为卷帘图层(覆盖层layer),也就是右侧拉过来的图层

  let that = this

      layer.on('prerender', function (event) {

        var swipe = document.getElementById("swipeContainer");

        var ctx = event.context;

        //计算图层在canvas画布上需要显示的范围

        var mapSize = that.mapObject.getSize();

        var height = event.context.canvas.height;

        var width = event.context.canvas.width;

        var swipeWidth = swipe.offsetLeft * width / mapSize[0];

        var tl = [swipeWidth, 0];

        var tr = [width, 0];

        var bl = [swipeWidth, height];

        var br = [width, height];

        ctx.save();

        //绘制裁剪路径

        ctx.beginPath();

        ctx.moveTo(tl[0], tl[1]);

        ctx.lineTo(bl[0], bl[1]);

        ctx.lineTo(br[0], br[1]);

        ctx.lineTo(tr[0], tr[1]);

        ctx.closePath();

        //裁剪,裁剪路径以外的部分不会绘制在canvas上下文中

        ctx.clip();

      });

      layer.on('postrender', function (event) {

        const ctx = event.context;

        ctx.restore();

      });

------------------------

关闭卷帘图层只能通过删除操作

mapObject.removeLayer(layer);

样式:根据情况修改

#swipeContainer {

  position: absolute;

  opacity: 0.8;

  height: 100%;

  width: .25rem;

  top: 0;

  left: 50%;

  cursor: col-resize;

  z-index: 2;

  background: rgba(0, 255, 54, 1);

  border-width: 0px 0.5px 0px 0.5px;

  border-style: solid;

  border-color: rgba(255, 255, 255, 1);

  box-shadow: 0px 2px 4px rgba(255, 255, 255, 1);

  .handle {

    margin-top: -0.9rem;

    margin-left: -0.9rem;

    top: 50%;

    left: 0;

    position: absolute;

    z-index: 30;

  }

}

#swipeContainer:hover {

  opacity: 0.6;

}

  • 24
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值