前端bug录-移动端下载图片

简介: 前天,快下班的时候,一朋友发来一个战绩图。这是要约我上分?(这兄弟一手 C 位吊打亲友)。我果断拒绝三连。结果,小韭菜问我,右边那个图怎么做?那好了,事情从这里开始

bVbtzPn.webp.jpg


分析一下需求


这个图好像叫雷达图,那我们先去看 echarts,简直不要太像好吗?


bVbtzPG.webp.jpg


小韭菜没给我反应的机会提出了另一个想法:简单一点

简单一点,我又想起了 Vue官网 有这个东西。


小韭菜看都没看就说:不用 Vue

What?我只是让你看看原理啊。那好吧,我看了一眼,就是 svg 实现


SVG 实现雷达图


jsrun测试地址,如果 jsrun 挂了,可以去我个人网站上看测试地址


<svg width="200" height="200" class="demo-svg warp">
  <polygon points="100,10.899999999999991 175.32367609057616,75.52585404550416 145.49457852743743,162.61791536462093 71.43363673858582,139.31822592662246 41.795341202736594,81.08815994425322" class="demo-polygon" style="fill: #41B883;"></polygon> 
</svg>


SVG 的 polygon


<polygon> 标签用来创建含有不少于三个边的图形。

points 属性定义多边形每个角的 x 和 y 坐标


那我们来看上面的图片,正好五个角,那我们就可以动手改改。简单的一匹


100,10.899999999999991
175.32367609057616,75.52585404550416
145.49457852743743,162.61791536462093
71.43363673858582,139.31822592662246
41.795341202736594,81.08815994425322


实现下载雷达图


因为快下班了,小韭菜看了一眼说搞定。然后又提出了一个需求,下载这个图片。我一想简单的一匹啊。我前两天才写了文章的 前端培训-初级阶段-场景实战(2019-06-06)-下载文件&下载进度


  1. 小韭菜之前用过 html2canvas 还是啥来着。直接这样搞


  1. download 直接下载(svgToDataurl


  1. svgToCanvas 然后下载 canvas 的图片


  1. canvastoBlob 结合 URL.createObjectURLdownload


  1. canvastoDataUrl 结合 download


为啥我上面写了这么多的方法。


因为移动端不好使。不好使的原因就是 DataURLBlobURL 在移动端(微信、QQ、QQ浏览器)无法下载


SVG 怎么用 img 显示


这个还是当时在张鑫旭张大师哪里看到的方法。

SVGTODataURLdata:image/svg+xml,%3Csvg xmlns='http://w

这样我们就可以显示了。


download 直接下载


上面我们显示了出来,直接下载吧。nonono,因为上面的 Dataurl 是 svg 格式的,下载也是 SVG 格式的。


所以我们需要用 img 读取 svgurl。然后 canvas 读取 img 。然后 canvas 输出想要的图片格式。然后再下载。


download 无法使用,那我们怎么办呢?


  1. PC端,走 download 。


  1. 移动端,走 长按保存图片。


总结步骤


  1. SVG 生成雷达图。(实现效果)


  1. SVG to DataUrl。(为了让 img 可以加载)


  1. img 加载 DataUrl。(为了让 canvas 可以加载)


  1. canvas 加载 img。(为了改变输出格式)


  1. canvas toDataUrl。(改变输出格式为图片格式)


  1. 分情况支持下载
  1. 移动端 图片长按下载
  2. PC端 download下载


测试地址


问题:如果计算对应的点

假设我们要做的是 五角形,宽高都是 200px。各项能力都是 0-100%


  1. 中心点为 100,100


  1. 我们先平分五份 360/5 = 72


  1. 通过上面的我们可以把我们问题变为已知圆心、线段点&长度(百分比*0度的最长边)、和旋转角度(每项能力是72),求旋转点坐标。如下,已知 A、B 点坐标,BAC角度求C点坐标


bVbtGdw.webp.jpg


  1. 或者说计算圆上任意一点
    圆点坐标:(100,100),半径:100,角度:72
    圆上任一点为:(x1,y1)


x1 = 100 + 100 * Math.cos(72 * Math.PI /180) //x1=x0+r*cos(ao*3.14/180)
y1 = 100 + 100 * Math.sin(72 * Math.PI /180) //y1=y0+r*sin(ao*3.14/180)


bVbtGnc.webp.jpg

相关文章
|
3月前
|
前端开发
后端返回图片二进制流,前端转base64
本文介绍了如何将后端返回的图片二进制流转换为Base64格式,以便在前端使用。通过在axios请求中设置`responseType`为`arraybuffer`,然后使用`btoa`和`Uint8Array`进行转换。
351 5
|
2月前
|
存储 前端开发 JavaScript
🚀前端轻松实现网页内容转换:一键复制、保存图片及生成 Markdown
在现代前端开发中,提升用户的交互体验至关重要。本文将详细介绍如何使用 HTML2Canvas 和 Turndown 两个强大的 JavaScript 库,实现将网页选中文本转化为图片并保存或复制到剪贴板,或将内容转换为 Markdown 格式。文章包含核心代码实现、技术细节和功能拓展方向,为开发者提供了一个轻量级的解决方案,提升用户体验。
189 68
|
1月前
|
移动开发 前端开发 JavaScript
惊!这些前端技术竟然能让你的网站在移动端大放异彩!
随着互联网技术的发展,移动设备成为主要的上网工具。本文介绍了几种关键的前端技术,包括响应式设计、图片优化、字体选择、HTML5和CSS3的应用、性能优化及手势操作设计,帮助开发者提升网站在移动端的显示效果和用户体验。示例代码展示了如何实现简单的双向绑定功能。
35 3
|
1月前
|
前端开发 JavaScript 开发者
前端开发的终极技巧:如何让你的代码既简洁又高效,还能减少bug?
【10月更文挑战第30天】前端开发充满挑战与创新,如何编写简洁高效且少bug的代码是开发者关注的重点。本文介绍五大技巧:1. 模块化,提高代码复用性;2. 组件化,降低代码耦合度;3. 使用现代框架,提高开发效率;4. 统一代码规范,降低沟通成本;5. 利用工具,优化代码质量。掌握这些技巧,让前端开发更高效。
85 1
|
2月前
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
130 1
|
2月前
|
JavaScript 前端开发 Python
django接收前端vue传输的formData图片数据
django接收前端vue传输的formData图片数据
63 4
|
2月前
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
27 1
|
2月前
|
前端开发 JavaScript 编译器
不走弯路,纯前端如何把图片导出成视频!
【10月更文挑战第3天】不走弯路,纯前端如何把图片导出成视频!
79 3
|
2月前
|
编解码 前端开发 UED
前端:移动端视口配置
移动端视口配置是指针对移动设备浏览器设置视口的宽度、高度和缩放等属性,以确保网页能根据不同的屏幕尺寸和分辨率进行适配,提供更好的用户体验。合理的视口配置是移动优先设计的关键环节。
|
2月前
|
JavaScript 前端开发 编译器
吐血整理:纯前端如何实现批量dom转图片,并下载成压缩包
【10月更文挑战第2天】吐血整理:纯前端如何实现批量dom转图片,并下载成压缩包
61 2