当前位置: 首页 > news >正文

国际免费b2b网站大全在线优化seo

国际免费b2b网站大全,在线优化seo,网页设计与制作的理解,做网站在哪目录 引言一、监听场景加载进度1. 基础代码2. 加工代码 二、进一步封装代码1. 已知存在的弊端2. 封装hooks函数 三、使用hooks方法1. 先看下效果2. 如何使用该hooks方法 三、总结 引言 本篇为Cesium开发的一些小技巧。 判断Cesium场景是否加载完毕这件事是非常有意义的。 加载…

目录

  • 引言
  • 一、监听场景加载进度
    • 1. 基础代码
    • 2. 加工代码
  • 二、进一步封装代码
    • 1. 已知存在的弊端
    • 2. 封装hooks函数
  • 三、使用hooks方法
    • 1. 先看下效果
    • 2. 如何使用该hooks方法
  • 三、总结

引言

本篇为Cesium开发的一些小技巧。

判断Cesium场景是否加载完毕这件事是非常有意义的。

  • 加载场景本身是个异步过程,然而我们经常会遇到一些业务场景是需要基于某一个模型加载完毕后再进行初始化操作,然后对模型进行操作。
  • 包含三维场景的页面和日常浏览的网页在加载效率上是不同的,人们往往对包含三维场景页面加载时长的容忍度会比较高。我们需要给出一个直观的加载过程用于安慰用户耐心等待较长的加载过程。
  • Cesium的模型加载策略是由粗到细分片加载,我们需要用户可以直接看到一个已经加载完毕的场景,而不是一点点细化的过程。

一、监听场景加载进度

这个功能要用到 CeiusmEventHelper 子类,监听 tileLoadProgressEvent 方法

1. 基础代码

  const helper = new Cesium.EventHelper();helper.add(viewer.scene.globe.tileLoadProgressEvent, (e) => {console.log(e);});

解释下代码,这里初始化了一个EventHelper实例,并监听tileLoadProgressEvent方法,他会监听每帧场景中切片加载队列的长度。回调函数入参 e 为int类型数字,代表当前场景中剩余未加载的切片数量。

2. 加工代码

  const helper = new Cesium.EventHelper();let maxTile = 0;let isLoaded = false;helper.add(viewer.scene.globe.tileLoadProgressEvent, (e) => {maxTile = Math.max(maxTile, e);const progress = Math.floor(((maxTile - e) / maxTile) * 100);isLoaded = viewer.scene.globe.tilesLoaded;console.log("progress", progress);console.log("tilesLoaded", isLoaded);

解释下代码,这里在基础代码上做了一点点加工,在外部设置个最大切片数量的变量,使用Math.max赋予最大的切片数量值,通过最大值和当前值的计算可得一个百分比进度值。此外 viewer.scene.globe.tilesLoaded 是一个Boolean值,更直观的表达了切片是否加载完成。此时我们得到了加载进度和加载完成的标志。


二、进一步封装代码

1. 已知存在的弊端

我们已经知道了如何监听场景切片的加载进度,但是它会在每一次拖动地球转动时同样监听到这个微调的过程。我们希望只有在页面初始化时、加载模型时调用一次监听事件提供进度提示,其他时候不监听。

2. 封装hooks函数

想象一下函数的使用场景,我们需要监听场景中切片的进度和完成标志,我们还需要它只监听一次就清理监听事件,额外提供销毁方法不要继续占用资源,最后需要它能够实时输出进度值和加载完成标志。

利用vue3的响应式变量方法ref,将progress 、isLoaded 包装为响应式变量。

import { ref } from "vue";export const useTileloadProgress = () => {const helper = new Cesium.EventHelper();let isLoaded = ref(false);let progress = ref(0);/*** @description: 触发监听事件* @return {*}*/const _onLoad = () => {let maxTile = 0;helper.add(viewer.scene.globe.tileLoadProgressEvent, (e) => {maxTile = Math.max(maxTile, e);progress.value = Math.floor(((maxTile - e) / maxTile) * 100);isLoaded.value = viewer.scene.globe.tilesLoaded;//   当一次加载完成后移除监听事件if (isLoaded.value) {_onRemove();}});};/*** @description: 移除监听事件* @return {*}*/const _onRemove = () => {helper.removeAll();};/*** @description: 移除监听事件,清理EventHelper实例,初始化变量值。* @return {*}*/const _onDestroy = () => {remove();helper = null;isLoaded.value = false;progress.value = 0;};return {progress,isLoaded,_onLoad,_onRemove,_onDestroy,};
};

三、使用hooks方法

1. 先看下效果

基础场景加载有点快,加载模型或者地图时,效果应该更明显些。
在这里插入图片描述

2. 如何使用该hooks方法

初始化场景请参考:【WebGis开发 - Cesium】三维可视化项目教程—初始化场景

在获取了progress和isLoaded两个变量后,可以进一步使用项目UI框架做提示,或者美化一个进度加载的界面。自由发挥

<script setup>
import { onMounted } from "vue";
import { initCesiumMap } from "@/utils/cesium/index.js";
import { useTileloadProgress } from "@/hooks/useTileloadProgress.js";
const { progress, isLoaded, _onLoad, _onRemove, _onDestroy } =useTileloadProgress();
onMounted(() => {
// 初始化地球场景initCesiumMap();
// 监听加载进度_onLoad();
});
</script>

三、总结

本篇主要介绍了如何利用 EventHelpertileLoadProgressEvent 来判断一个Cesium场景是否加载完成。解决了Cesium场景无法感知加载进度的问题,给业务场景开发提供了明确完成标志。

利用vue3.0的新特性,将以上方法封装为hooks函数,更方便业务测使用。

再接再厉~

http://www.yidumall.com/news/58160.html

相关文章:

  • 庆阳网页设计背景陕西整站关键词自然排名优化
  • 广州新塘建网站2345软件为什么没人管
  • 电子商务网站建设实训总结新app推广方案
  • 专门做物理的网站合肥seo推广培训班
  • 网站做推广需要什么seo关键词排名软件流量词
  • 太原建站公司有哪些百度发布信息的免费平台
  • 拿p5.js做的网站互联网平台推广怎么做
  • 有哪些在线做图的网站天津优化网络公司的建议
  • 做英雄联盟网站的图片素材百度手机助手app免费下载
  • 广州移动 网站建设外链平台
  • 如何自建网站怎么制作seo搜索优化
  • 邢台市桥西住房建设局网站疫情防控数据
  • 网站建设demo可以免费网络推广网站
  • 网站制作湖州芜湖seo
  • 宣城公司做网站网站运营推广方案
  • 中区网站建设外链平台有哪些
  • abc站seo站长综合查询工具
  • 网站建设宣传资料外贸网站都有哪些
  • 广州网站推广哪家好百度快照查询入口
  • 大型购物网站建设费用珠海网站建设
  • 网站和软件是怎么做的凡科建站登录入口
  • 做网站基本流程360优化大师官方下载最新版
  • 正规网站建设费用今天发生的新闻
  • 临清做网站亚马逊免费的关键词工具
  • 用css做网站手机如何制作一个网页链接
  • 网站备案需要关闭网站吗搜索引擎优化的内部优化
  • wordpress 优惠券主题沈阳seo优化
  • 网站做推荐链接端口视频营销成功的案例
  • 512内存服务器做网站设计网站排行
  • 免费如何做网页或网站seo推广如何做