Vue3+百度地图,只显示目标位置,超出返回,只能在目标位置放大,放大后可以缩小,超出目标位置不能缩小

 这是第一种办法,需要用到AreaRestriction_min.js这个js文件

map = new BMap.Map("allmap");
     map.centerAndZoom(
        new BMap.Point(114.34375, 30.49989),
      15
   );
    map.setCurrentCity("成都");
  map.enableScrollWheelZoom();
   map.setMapStyleV2({
    styleId: '83d85c903f83d83a839f8c507acd8792',
  })
 const bounds = map.getBounds(); //获取地图可视区域
  const sw = bounds.getSouthWest(); //获取西南角的经纬度(左下角)
    const ne = bounds.getNorthEast(); //获取东北角的经纬度(右上角)
 const sws = new BMap.Point(sw.lng, sw.lat);
  const nes = new BMap.Point(ne.lng, ne.lat);
     const minZoom = 15;
  const maxZoom = 18;
    const boundary = new BMap.Bounds(
         sws, nes,
     );
     BMapLib.AreaRestriction.setBounds(map, boundary);
     map.setMinZoom(minZoom);
     map.setMaxZoom(maxZoom);
     map.setViewport(bounds);
//引入文件
 <script type="text/javascript"
    src="http://api.map.baidu.com/library/AreaRestriction/1.2/src/AreaRestriction_min.js"></script>
  <script type="text/javascript" src="http://api.map.baidu.com/library/BoundsTool/1.2/src/BoundsTool_min.js"></script>

第二种就是 百度地图官方文档有一个flyTo()的方法,和panTo()两个方法,panTo实测超出太长距离的时候,地图是不能返回的,暂时还没发现问题所在所以暂时用flyTo这个方法

 

 const bounds = map.getBounds(); //获取地图可视区
    const sws = new BMapGL.Point(bounds.sw.lng, bounds.sw.lat);
    const nes = new BMapGL.Point(bounds.ne.lng, bounds.ne.lat);
    const boundary = new BMapGL.Bounds(
        sws, nes,
    );
    //boundary.containsBounds(map.getBounds())判断当前是否在可视区内
    map.addEventListener("dragend", () => {
        if (boundary.containsBounds(map.getBounds())) {
            return;
        } else {
            map.flyTo(new BMapGL.Point(120.196689, 30.332336), 18);
        }
    });

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以按照以下步骤在单个Vue 3 + TypeScript页面中使用Hammer.js来实现对图片的放大缩小和移动,同时确保移动不超出屏幕范围: 1. 安装Hammer.js:在项目目录下运行以下命令进行安装: ``` npm install hammerjs ``` 2. 在Vue组件中引入Hammer.js: ```typescript import { createApp } from 'vue'; import Hammer from 'hammerjs'; export default { mounted() { const element = this.$refs.image; // 图片元素的引用 // 使用Hammer.js创建一个Hammer实例 const mc = new Hammer.Manager(element); // 启用缩放和平移识别器 mc.add(new Hammer.Pinch()); mc.add(new Hammer.Pan({ direction: Hammer.DIRECTION_ALL })); let lastScale = 1; // 上一次缩放比例 let lastPosX = 0; // 上一次X轴平移距离 let lastPosY = 0; // 上一次Y轴平移距离 mc.on('pinchstart panstart', () => { // 缩放开始或平移开始时记录当前缩放比例和平移距离 lastScale = element.style.transform ? parseFloat(element.style.transform.replace(/[^0-9.]/g, '')) : 1; lastPosX = element.offsetLeft; lastPosY = element.offsetTop; }); mc.on('pinch pan', (event) => { // 缩放和平移过程中更新样式 const currentScale = lastScale * event.scale; const currentPosX = lastPosX + event.deltaX; const currentPosY = lastPosY + event.deltaY; // 更新图片样式 element.style.transform = `scale(${currentScale}) translate(${currentPosX}px, ${currentPosY}px)`; }); mc.on('pinchend panend', () => { // 缩放结束或平移结束后检查是否超出屏幕范围 const screenWidth = window.innerWidth; const screenHeight = window.innerHeight; const imageWidth = element.offsetWidth * parseFloat(element.style.transform.replace(/[^0-9.]/g, '')); const imageHeight = element.offsetHeight * parseFloat(element.style.transform.replace(/[^0-9.]/g, '')); const maxPosX = Math.max(screenWidth - imageWidth, 0); const maxPosY = Math.max(screenHeight - imageHeight, 0); // 限制平移范围 let currentPosX = parseFloat(element.style.transform.replace(/[^0-9.]/g, '')); let currentPosY = parseFloat(element.style.transform.replace(/[^0-9.]/g, '')); currentPosX = Math.min(Math.max(currentPosX, maxPosX), 0); currentPosY = Math.min(Math.max(currentPosY, maxPosY), 0); // 更新图片样式 element.style.transform = `scale(${lastScale}) translate(${currentPosX}px, ${currentPosY}px)`; }); }, }; ``` 3. 在Vue模板中使用ref指令引用图片元素: ```html <template> <div> <img ref="image" src="path/to/image.jpg" alt="Image"> </div> </template> ``` 这样,你就可以在Vue 3 + TypeScript页面中使用Hammer.js来实现对图片的放大缩小和移动,并且确保移动不超出屏幕范围。记得将"path/to/image.jpg"替换为你实际的图片路径。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值