项目难点记录

                项目中遇到的各种问题,原生的,框架的,版本管理等都记录在此...

使用vue实现框选功能

        描述: 项目中需要有框选查询的功能,但是SM地图中并没有提供相应api,所以需要自己写一下

        思路: 浏览器原生和map可以监听同一个事件,点击地图某一点,可以得到事件对象的经纬度和像素点位置,同时浏览器监听到原生事件,也可以得到像素点,屏幕坐标等...

        模拟框选需要原生事件创造无bgColor的div并给一个边框,同时需要获取地图事件中鼠标落下和抬起时的经纬度,方便传递给后端。

1.容器

该容器用于渲染地图,在这里监听事件

   <div
      id="mainMap"
      style="height: calc(100vh - 160px); width: calc(100vw - 20px)"
      @mousedown="down"
      @mousemove="move"
      @mouseup="up"
      ref="map"
    ></div>

2.全局锁

        这是一个概念,容器监听的事件会立即被触发,但是我们需要在选中框选查车这个下拉框后在触发框选功能,其余时间正常操作地图。

·····所以data中需要有一个布尔值 isMove 来当锁。

·····(可以看到在初始化地图的时候就已经监听事件了,doublePoint对象是用来存放查询必需的两个点的经纬的)

 getmap() {
      this.map = new smartmapx.Map(this.option);
      var nav = new smartmapx.NavigationControl();
      this.map.addControl(nav, "top-right");
      this.map.on("mousedown",(e)=>{
        this.doublePoint.point1=e.lngLat
      })
      this.map.on("mouseup",(e)=>{
        this.doublePoint.point2=e.lngLat
      })
    },

之后在点击下拉菜单并选中框选查车之后,改变全局锁的状态为true,触发框选事件

3.事件

        data中存放div,鼠标按下并移动用于改变div位置和大小等,添加至渲染map的容器内。(这里是原生js的事件)

        注意:监听事件要获取事件对象,在绑定方法时只写方法名不需要加括号

交互事件执行是因为全局锁为true,在鼠标抬起的那一刻,全局锁再次变为false!

    move(e) {
      if (this.isMove === true) {
        this.map.getCanvas().style.cursor = "crosshair";
        this.map.dragRotate.disable();
        this.map.dragPan.disable();
        this.ele.style.width = e.layerX - this.layerX - 10 + "px";
        this.ele.style.height = e.layerY - this.layerY - 10 + "px";
      }
    },
    down(e) {
      if (this.isMove === true) {
        this.ele.style.width = "0px";
        this.ele.style.height = "0px";
        this.ele.style.position = "absolute";
        this.ele.style.left = e.layerX + "px";
        this.ele.style.top = e.layerY + "px";
        this.ele.style.border = "1px solid black";
        this.layerX = e.layerX;
        this.layerY = e.layerY;
        this.$refs.map.appendChild(this.ele);
      }
    },
    up(e) {
      if (this.isMove === true) {
        this.formValue = "工具";
        this.map.dragRotate.enable();
        this.map.dragPan.enable();
        this.$refs.map.removeChild(this.ele);
        this.isMove = false;
        this.map.getCanvas().style.cursor = "pointer";
        console.log(this.doublePoint); //注意这里就是用到的数据
            
      }
    },

git的一些操作

     

        提交代码前必须要git pull 一下,将最新代码拉取并解决冲突后再将自己的代码上传。

        如果本地代码更改并提交至远程子分支后(新),拉取远程主仓库代码(旧),这时会产生版本回退,可以通过 git rebase --abort 来取消回退

        如果要回退版本,在更改冲突后 git add.  git rebase --continue  ,从而解决冲突.

vue / react 打包成h5App

从开始写移动端的练手项目到现在,踩了不少坑,同时也学了不少新技术

两个移动端分别用

react -hooks+ antd-mobile + rtk + axios + ts 

vue3 + nut + axios + pinia + ts 来写。

在这里记录一下,以免之后遇到还得再次找资料

 打包要注意的点:

        1.区分本地环境和服务器环境

        一般APP都是在本地打开,所以在移动端项目打包完成后也必须是本地可以打开的,

Vite 利用浏览器原生 ES Modules的支持,实现开发阶段的 Dev Server,进行模块代码的按需加载。默认输出 <script type=module>就是 ES Modules 以type="module"模块化的方式,来加载和访问资源文件。而这模块化形式的JS代码,想要在浏览器中直接以文件系统的形式去访问运行不是被允许的,需要在HTTP服务器环境下才能访问。
webpack打包后支持直接打开文件

 可以选择一开始就用基于webpack的脚手架来创建 ,譬如 create -react-app  或 vue-cil  

也可以用vite敏捷开发,之后使用webpack重构项目

        2.打包前检查资源

        要确保项目里文件没有中文命名,否则打包失败

之后用hbuilderX新建h5app项目,将打包好的文件替换该app的内容,右键打包即可...

   反思:要注意vite 和 webpack的区别

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值