手撸一个前端天气卡片腾讯云开发者社区

我给DouWeather(后称DW)的定位是网页小组件,也是出于这个考虑,我参考了如iOS系统的小部件、新版MIUI系统小组件、鸿蒙系统小部件、win11小组件,发现都无一例外具有同一特征:扁平化,圆角,选用无衬线字体,元素风格简洁,并且四者都在或背景或图标中大量使用渐变,使小部件表现得较为灵动。其中win11小部件添加了浅阴影,可能是为了让小部件从亚克力背景中凸显出来。

于是乎,我也照猫画虎,设计了DW的晴天图标,并且用XD设计出了第一种卡片样式(现DW的medium卡片样式)。

注: DouWeather的设计也参考了google adsense(MD2),mew等网站的设计风格。

将medium类样式的卡片缩短,便衍生出了一个正方形的small样式小组件。

之前心血来潮想写天气卡片的时候也做过图,当时参考的MD风格,正好趁着国庆回家从电脑里边翻了出来,下面便不知道多久前天气卡片的初稿…就…蛮抽象的…

DW中许多要素都抄借鉴了小米天气,图标也是如此。DW尽量保证图标整体风格简洁,使用大块的渐变背景突出天气特点。在正式开干前,我就仿照小米天气做出了晴、阴、多云这三个图标,方便之后的设计和开发。格式依然采用了svg,控制组件整体的体积,保证加载速度。

开发过程中受到室友启发,尝试为天气图标增加了一些动画,不过有些喧宾夺主,最后不了了之。

开发前我其实仅仅计划做出两种样式(即small和medium)。做normal样式的主要原因,是开发过程中我发现:当medium样式被置于一个宽度过大的元素上方时,会显得内容空洞,不够美观。于是便在medium样式的基础上,加长了宽度,增加了空气质量、防晒建议等数据展示。而detail样式,纯粹是因为我对小米天气的趋势预报爱得深沉,想要在DW中复刻一个出来。

天气图标会在卡片中大量复用(尤其是detail样式),如果没有一个比较简洁的调用方式,维护起来会很困难。并且在开发时图标仅设计了3个,需要顾及开发后期如何便捷地对图标增删改,尽量降低图标检索和主体代码间的耦合度。在前端中,一般有下面几种图标引入方式:

不过,在DW中也有一部分图标采用了这种方式,那便是风向的图标,图标单色且数量固定不需要频繁修改(8个方位),非常适合使用这种方式。

然而DW的天气图标并没有采用上述的两种方式。我对图标部分使用Web Components做了封装,已经是类似symbol的作用,因此再使用symbol便显得有些多此一举。

封装后的天气图标调用就方便多了,可以直接使用 <dw-icon type="sunny"></dw-icon> 这样的代码来调用特定的图标,下面是一个示例。

之后打算使用gulp,这种方式也能够为开发提供便利。

在天气组件的开发过程中,我才发现还原设计稿其实是这其中最简单的一件事。我需要保证卡片中的所有元素都能有条不紊地展现出来,我原本想要固定每一种样式的卡片宽度,这样能够确保卡片的布局总是完美的,但是会使天气卡片的泛用性大打折扣,其他使用DW的人并不会专门为了一个小组件而修改自己的布局方案,同时固定宽度意味着在移动设备上,天气卡片的体验会很糟糕。但是自适应,又该怎么做呢?

最常用的自适应方法是写媒体查询,但是我不能使用媒体查询,其他开发者在哪儿插入卡片、怎么插入卡片、卡片的父级元素是什么状态我都无从得知,我不能仅通过屏幕尺寸判断出天气卡片目前的状态。

我也不能通过判断卡片宽度就隐藏或显示某些元素,因为之后的版本DW会将数据展示的部分模块化,允许其他开发者自定义展示哪些数据,擅自修改展示的元素可能导致其他开发者的配置没法如预期那样展示出来。

我一度想要固定卡片宽度,事实上直到我将DW的布局和逻辑基本全部写完后,我依然没有找到很好的解决方案。

给我灵感的,是windows的资源管理器:

天气卡片的主体元素固定在左侧不动,右侧的数据展示根据卡片宽度显示滚动条,实现也非常简单,因为我使用的弹性布局,只要在原来的数据展示区域外边包装一层带有 flex-grow: 1; 样式的容器就好了。

这一部分也很复杂,因为社团面试任务中有提到图表展示,当时是想复刻一个小米天气的15天趋势预报试试水,如果成了的话之后还可以拓展到小时预报之类的图表展示。图表部分是使用svg实现的,为了让暗黑模式的样式操作能够便利,所以使用了svg而不是canvas。绘图直接用的浏览器原生js实现,只需要绘制一个折线图,chartjs显然有些大材小用,比较臃肿。原先设计稿中采用的展示方式很难优雅地在中间位置插入图表,所以后来将早上数据、图表、晚上数据全部分了开来,因为列宽是一致的,所以也不用担心错位的问题。

原设计

修改后

接着就是绘制图表了,首先统一计算出折点的X坐标,接着按照温度确定出每个折点的Y坐标,折点用的是svg的circle元素,折线部分直接用path搞定了。

path的d参数语法逻辑其实和canvas绘制的逻辑是相类似的,首先使用M(MoveTo)指令将起点移动到第一个点的位置,接着只需要使用L(LineTo)指令绘制之剩下折线便完成了。

只需要使用 @media(prefers-color-scheme: dark) 这个媒体查询便能够定义暗黑模式下的卡片样式。

有时候使用者可能不想让媒体查询自作主张修改卡片样式,于是乎我提供了属性 theme 来控制卡片颜色。可以使用theme="light" 或是 theme="dark" 将卡片锁定在明亮模式或暗黑模式。这点小功能我想着完全用css来实现,之前Web Components用得不多,想着用宿主选择器轻松就能搞定,便想当然地写出了下面的这段css…

这次写DW,让我学到了许多,之前写前端很少会自己去做图表生成,经常是引用个chartjs或是echarts了事。对Web Components也有了较之前更为全面的了解,同时也熟悉了一下flex布局的使用,至少2天多的小米天气没白看,我同学看我一天到晚拿着手机刷小米天气以为我疯了。

THE END
0.风向标,矢量图正版高清图片下载等距线锥气象学风向标志孤立在蓝色和绿色背景。风向标指示风向和风力。方形按钮。向量 EPS 黑色线锥气象学风向标志风向标孤立在白色背景。风向标指示风向和风力。设置图标丰富多彩。向量 EPS 黑色线锥气象学风向标志风向标孤立在透明的背景。风向标指示风向和风力。向量 jvzquC41yy}/xll0eqs0e{jcvk|f1:538:<86>=
1.apple支持请参阅了解天气图标。 若未看到想了解的位置的详细信息,请轻点 ,然后轻点“我的位置”或其他位置。 执行以下任一项操作: 在每小时天气预报中查看不同时间:向左或向右轻扫每小时天气预报显示。 【注】当该位置的空气质量达到特定级别时,空气质量等级将显示在每小时天气预报上方。部分位置的空气质量等级始终显示在每jvzquC41uwvqq{y0crvmg7hqo1€i/ls1JV819=>4
2.Echarts实现自定义图标——风向图echarts风速风向图本文介绍如何使用ECharts绘制风向图,包括自定义图标旋转和折线图添加风向图标的方法。通过示例代码展示了如何设置数据、配置图表样式及实现动态旋转效果。 上图用了两种模式表示风向图,第一种是自定义系列,第二种使用了折线图,给折线图添加自定义图标。 两者的区别在于给options.series设置不同的type值,如下图: jvzquC41dnuh0lxfp0tfv8Mgnnu`{rmcq1gsvrhng1jfvjnnu173::8796;
3.ps怎么画电力风车?ps风向风力标志的绘制方法photoshop教程4、ctrl+j复制,ctrl+t自由变换,ctrl+shift+alt+t重复上次变换画出风页,形状工具配合锚点画支柱 5、ctrl+g新建组,复制组ctrl+t自由变换移动位置 6、文字工具T添加文字 7、选中相应文字图层降低填充 8、得到风向风力图标效果 以上就是ps绘制电力风车的教程,希望大家喜欢,请继续关注脚本之家。jvzquC41yy}/lk:30pku1ymqvqyiqy482::567mvon
4.如何调整风向向上SUV车型往往会结合多种调节方式,为车主提供更丰富的选择。部分配备智能空调系统的车型更是科技感十足,在中控屏幕进入空调设置界面,找到风向调节选项,轻点向上的风向图标,就能精准调整。 调节风向时,季节因素不容忽视。在炎炎夏日,先将风向设置为水平向前,待车内温度快速下降后再向上调节,既能快速降温又能避免直吹人体带jvzquC41o0vdc~yq0eun0ls1z1::7>46;7;2;?:0jvsm
5.如何调整风向向上SUV车型往往会结合多种调节方式,为车主提供更丰富的选择。部分配备智能空调系统的车型更是科技感十足,在中控屏幕进入空调设置界面,找到风向调节选项,轻点向上的风向图标,就能精准调整。 调节风向时,季节因素不容忽视。在炎炎夏日,先将风向设置为水平向前,待车内温度快速下降后再向上调节,既能快速降温又能避免直吹人体带jvzquC41yy}/rlfwvq4dqv3ep1pyym46;7;06B:73;<60qyon
6.日立中央空调怎么调风向首先,找到空调遥控器上的“风向”按钮。通常,这个按钮上会有一个图标,表示风向的调整。按下该按钮,进入风向设置模式。 接下来,您可以通过遥控器上的方向键或者旋转按钮来调整风向。一般来说,遥控器上会有“上”、“下”、“左”、“右”等方向键,您可以通过按下这些方向键来改变风口的吹风方向。同时,有些遥控器jvzquC41i0vdqwqkpg4dqv3ep1~03@7913=39@62:0nuou
7.大风图标素材大风图标图片元素觅元素是设计素材的免费下载网站,提供大风图标素材,大风图标图片,大风图标免抠素材设计元素,大风图标png图片透明背景等素材免费下载。jvzquC41yy}/7:~wcpyv0lto1v{qkjs1fclfppywdkgp0qyon
8.图吹风的图标如何去掉?RAV4荣放论坛没有开空调,但是空掉屏幕上一直显示吹风风向的图标,看着很别扭,怎么才能去掉啊 jvzquC41en{c0jzvqjung7hqo0io1kgu1vnsgji1;g<8;@=4dg>42A
9.CAD图纸中的玫瑰风向图在我们绘制的CAD图纸中,为了可以准确地表达图纸的内容,会使用不同的图标来进行表示,同样,在CAD图纸中,如果要表示当地区风的风向时,我们一般会绘制玫瑰风向图来表示。在此为大家整理了与玫瑰风向图相关的图纸,大家可以使用浩jvzquC41yy}/i|yctege0lto1estFnyckn525:971
10.三菱中央空调面板显示图案详解7. 水平或垂直风向调节图标:用于调节空调的送风方向,可以设置为固定或摆动。 8. 过滤器清洁提醒图标:显示过滤器清洁的提醒,表示需要及时清理过滤器。 9. 故障显示图标:当空调发生故障时,会显示相应的故障图标,如电源故障、传感器故障等。 这些图案通常以简洁直观的方式显示在空调的面板上,方便用户了解当前的状态和jvzquC41cuq/vxuzkw4dqv4|15;4:9;1
11.TE二次开发:风向风力符号标绘在做相关气象的系统开发时,会碰到相关风向标的符号标绘要求,在地图的指定位置标绘符号,形象的描述风向和风力。 可以采用做图标的方式,要把各种风力的图片都做全,还要根据风向,旋转图片的角度。 另一种是通过在地图上画线,把线拼接在一起,达到风向标的效果,下边说一下这种实现的方式。 jvzquC41fg|fnxugt0gmk‚zp0eun1jwvkerf1:6;5;89