IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> echarts、mapbox实操地图滚动事件 -> 正文阅读

[JavaScript知识库]echarts、mapbox实操地图滚动事件

地图滚动事件


最近在做项目,是一个大屏项目,页面中间是地图组件,有两种技术mapbox和echarts。地图上显示各个点,因为点数量过多,影响页面效果。客户要求做一个缩放效果,当鼠标移动到某个层级,可对内容的展示进行动态转换。因此我想到地图缩放技术,固定一个中间层级,当缩放操作大于或者小于这个中间层,可通过控制其返回的数据进行动态绑定,从而实现这一效果。
因为echarts和mapbox用到的缩放事件不一样,这里分开来说:

  • echarts地图缩放事件

直接上代码:

ctx.map.on('georoam', function (params) {  //只要页面一滚动就会进来
 	let _option = ctx.map.getOption() 
 	let _zoom = _option.geo[0].zoom  // 拿到层级
 	// 判断层级
 	if(_zoom > 9.6) {
 		console.log('如果大于9.6层级,就来到这里执行你的代码')
 	}
 	if(_zoom < 9.6) {
 		console.log('如果小于9.6层级,就来到这里执行你的代码')
 	}
})
//  ctx为node.js/egg技术获取map的技术
ctx.map.setOption(option);// 后面一定要加这个,重新画地图,不加这个的话就只改了数据没有映射到地图上

效果如下:在这里插入图片描述
在这里插入图片描述
值得一提的是,这里是进去方法就会调用接口,因为只要滚动方法就会执行方法返回数据,这样就会造成页面一卡一卡的现象,因为它在不断地执行着,不断地返回数据。因此我设置了一个全局 flag来控制一个变量(当我们刷新地图之后,zoom值是要小于 9.6的,所以我们先给 flag一个初始值 2)。当它进入 >9.6执行方法之后,判断是否为 2,是就进来执行方法,然后将flag值变成 1,这样它就不会再执行这一方法了。接着<9.6内部先判断是否为 1,是就执行方法并把 flag值变为 2,如此循环切换,避免出现重复调用现象发生。还有一种方法是 防抖节流,点击查看学习,可以来控制用户的使用。此处没有用到,有兴趣可以去了解一下。

  • mapbox地图缩放事件

实现方法一样,但是调用的 api和用法不一样,所以这里只展示 api和效果图
直接上代码:

// 缩放
_this.map.on("wheel", async function () {  //只要有缩放就会进来这里
  if(_this.recordcitycode) return 
  let range = _this.map.getZoom(); // range:当前缩放层级
  if (range > 9.5) {
    if (_this.flag == '2') {
      _this.flag = '1'
      let res = await _this.$app.curl.get("api/public/hj/hjamplifylist")
      if (res.state == '1') {
        _this.amplifylist = res.data
      }
      let item = ctx.option.Layers.findIndex(
        (p) => p.type == "dom_marker"
      );
      ctx.option.Layers[item].data = _this.amplifylist // 重新构造数据
      if (_this.marker_dict["dom_marker"]) _this.marker_dict["dom_marker"].map((p) => p.remove()); // 删除之前地图上的标记
      _this.initLayer["dom_marker"](ctx.option.Layers[item]); // 重新画标记
    }
  }
  if (range < 9.5) {
    if (_this.flag == '1') {
      _this.flag = '2'
      let listdata = await _this.$app.curl.get("api/public/hj/hjoriginaldata")
      if (listdata.state == 1) {
        _this.originaldata = listdata.data
      }
      let item = ctx.option.Layers.findIndex(
        (p) => p.type == "dom_marker"
      );
      ctx.option.Layers[item].data = _this.originaldata // 重新构造数据
      if (_this.marker_dict["dom_marker"]) _this.marker_dict["dom_marker"].map((p) => p.remove()); // 删除之前地图上的标记
      _this.initLayer["dom_marker"](ctx.option.Layers[item]); // 重新画标记
    }
  }
  _this.$param.push({ zoom: undefined })  //重新画地图
});

效果如下:在这里插入图片描述
在这里插入图片描述

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-11 16:33:25  更:2021-07-11 16:35:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 17:16:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码