- 判定宽度是否超出可视区域
/** * 获取文档显示高度与缩放比例. * @param documents * @param origin */protected getHeightAndScale( documents?: HTMLDivElement, origin?: any): { height: number; scale: number;} { documents = documents ?? this.getContainer() as HTMLDivElement; let wrapperHeight = 0, lastScale = 0; if (documents) {const size = this.files.speaker,// 所记录的主讲人的屏幕尺寸width = documents.offsetWidth,// 当前用户显示容器的可视宽度height = documents.offsetHeight; // 当前用户显示容器的可视高度let originWidth;/** 获取原始文档宽度 */if (!origin) {const pagination = this.getActivePagination();originWidth = pagination.originWidth;} else {originWidth = origin[2];}/*** 计算主讲人的缩放比.* 往下出现的 200 / 150 之类的常数, 为设定好的显示偏移量.*/const speakerRatio = Math.round((size.width - 200) / originWidth * 100) / 100;/** 非主讲人默认以高度为基准来计算文档显示的缩放比例 */lastScale = Math.round(speakerRatio / (size.height - 150) * (height - 100) * 100) / 100;/** 如果以高度为基准的情况下, 判定宽度是否超出可视区域 */const destWidth = Math.round(originWidth * lastScale * 100) / 100,offsetWidth = width - (this.isSpeaker() ? 200 : 120),diffWidth = destWidth - offsetWidth;if (diffWidth > 0) {/*** 如果超出可视区域, 重新设定缩放比,* 文档内容显示所在的DIV容器, 将进一步缩小,* 以保证宽度在正常的可视区域内*/wrapperHeight = (Math.round((offsetWidth * (size.height - 150)) / (size.width - 200) * 100) / 100);lastScale = Math.round(offsetWidth / originWidth * 100) / 100;} } return {height: wrapperHeight,scale: lastScale };}总结翻页控制的代码我就不贴出来了 , 与请求分片中的判定类似 。 总的实现 , 没有太大的难点 , 理清思路之后就很好实现了 , 上传速度快慢先不说 , 秒传校验通过的情况下 , 基本在 16ms 内完成 Content Download , 直至页面渲染出来 , 整个过程大概 1s 左右 , 有个前提是我的实现是等 5 个分页都渲染完成后又进行了一系列的涂鸦初始化操作后的时间 , 不做其它处理 , 只做展示 , 速度将会更快 。
推荐阅读
-
-
-
NG视频|早秋流行穿针织衫,再配上老爹裤,又潮又年青,穿连衣裙太冷了
-
读书卡内容摘抄 三年级《我爱阅读》读书卡的内容有哪些?
-
小小的科技观罗技K380鼠键熊猫滚滚IP套装,DIY出属于自己独一无二的鼠键
-
-
将于|原神公测开服时间一览, 原神什么时间公测?几点开服?
-
iphone11■最受欢迎的iPhone11价格暴跌至4299元:我劝你忍住别买
-
作为左撇子,我觉得生活上会有很多不便,但是为啥缺少一些针对左撇子的设计
-
遗产|金贤珠、朴熙顺二搭《遗产》!不祥之事发生,共同揭露家族秘密
-
穿越火线官方号|【CF】王者葵貂蝉放出多时,这全新的王者魅影是不是也该出现了
-
央视网|国家统计局:上半年,全国工业生产者出厂价格同比下降1.9%
-
-
笔记本电脑必备支架,8 档高度任意调节,保护颈椎,高效散热
-
中年|14家粤企上榜《财富》世界500强,腾讯上升最快
-
-
-
浪游陕西B|一直没有效果吗?问题可能出在这里,肩部肌群练了很长时间
-
中国足球|鲁能获喜讯!格德斯即将抵达中国,集齐6大外援与恒大争冠
-