当前位置: 网站首页>小程序开发>400电话办理

宜阳网站制作要多少钱【域名企业邮箱服务器注册申请办理】宜阳网络优化公司哪家好、宜阳软件开发外包价格、宜阳高端企业网站页面制作设计专业公司、宜阳微信公众号小程序购物支付搭建制作公司

发表日期: 2021-05-08 10:23:30 浏览次数:75

宜阳网站制作要多少钱【域名企业邮箱服务器注册申请办理】宜阳网络优化公司哪家好、宜阳软件开发外包价格、宜阳高端企业网站页面制作设计专业公司、宜阳微信公众号小程序购物支付搭建制作公司


宜阳县,隶属于河南省洛阳市,位于洛阳市西部,介于东经111°45′~112°26′北纬34°16′~34°42′之间,属暖温带大陆性季风气候。截至2019年,宜阳县总面积1616.8平方公里。截至2019年,宜阳县下辖12镇4乡,县政府驻城关镇 [1]  。 [2-3] 

宜阳县地域,夏、商时属于豫州雒西地,战国为韩国宜阳邑。1986年4月,洛阳专区撤销,宜阳县改属洛阳市。 [4]  宜阳县境内省道八官线、安虎线横穿东西,省道南车、县道宜新路和宜白路贯穿南北,洛阳市西南环绕城高速、郑西高速铁路客运专线穿境而过。 [5] 

2020年,宜阳县完成地区生产总值315亿元,增长3%;固定资产投资增长6.6%;规上工业增加值增长3.6%;一般公共预算收入14.5亿元,增长4.6%; [30] 


一个抖动的例子

做一个8帧的逐帧动画,每帧的尺寸为:360×540。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
.steps_anim {
position: absolute;
width9rem;
height13.5rem;
backgroundurl(//misc.aotu.io/leeenx/sprite/m.png) 0 0 no-repeat;
background-size45rem 13.5rem;
top50%;
left50%;
margin: –5.625rem 0 0 –5.625rem;
animation: step 1.2s steps(5) infinite;
}
@keyframes step {
100% {
background-position: –45rem;
}
}

观察在主流(手机)分辨率下的播放情况:

iPhone 6
(375×667)
iPhone 6+
(414×736)
iPhone 5
(320×568)
Android
(360×640)

四种分辨率下,可以看到除了 ip6 其它的三种分辨率都发生了抖动。ip6 不抖动的原因是适配方案是基本于 ip6 的分辨率订制的。)

分析抖动

图像由终端(屏幕)显示,而终端则是一个个光点(物理像素)组成的矩阵,换句话说图片也一组光点矩阵。为了方便描述,笔者假设终端上的一个光点代表css中的1px。

以下是一张 9px * 3px 的sprite:
9px * 3px

每帧的尺寸为 3px * 3px,逐帧的取位过程如下:
9px * 3px

把 sprite 的 background-size 的宽度取一半,那么终端会怎么处理?
9 / 2 = 4.5
终端的光点都是以自然数的形式出现的,这里需要做取整处理。取整一般是三种方式:round/ceil/floor。假设是 round ,那么 background-size: 5px,sprite 会是以下三种的一个:

情况一情况二情况三
9px * 3px9px * 3px9px * 3px

理论上,5 / 3 = 1.666...。但实际上光点取整后,三个帧的宽度都不可能等于 1.666...,而是有一个帧的宽度降级为 1px(亏),另外两个宽度升级为 2px(盈),笔者把这个现象称作「盈亏互补」。

再看一下盈亏互补后,逐帧的取位过程:

情况一情况二情况三
9px * 3px9px * 3px9px * 3px

可以看到由于盈亏互补导致了三个帧的宽度不一致,亏的那一帧在动画中的表示就是抖动

笔者总结抖动的原因是:sprite在尺寸缩放后,帧与帧之间的盈亏互补现象导致动画抖动

附注:1px 由几个光点表示是由以终端的 dpr 决定

解决方案

「盈亏互补」也可以说是「盈亏不一致」,如果尺寸在缩放后「盈亏一致」那么抖动现象可以解决。

解决构想一

笔者根据「盈亏一致」设计了「解决构想一」:

9px * 3px

根据上图,其实很容易就联想到一个简单的方案:不用雪碧图(即一帧对应一张图片)
这个方案确实是可以解决抖问题,不过笔者并不推荐使用它,因为它有两个负面的东西:

  • KB变大与请求数增多

  • 多余的 animation 代码

这个方案很简单,这里就不赘述了。

解决构想二

把逐帧取位与图像缩放拆分成两个独立的过程,就是笔者的「解决构想二」:
9px * 3px

实现「构想二」,笔者首先想到的是使用 transform: scale(),于是整理了一个实现方案A:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
.steps_anim {
position: absolute;
width360px;
height540px;
backgroundurl(//misc.aotu.io/leeenx/sprite/m.png) 0 0 no-repeat;
background-size1800px 540px;
top50%;
left50%;
transform-origin: left top;
margin: –5.625rem 0 0 –5.625rem;
transformscale(.5);
animation: step 1.2s steps(5) infinite;
}
@keyframes step {
100% {
background-position: –1800px;
}
}
/* 写断点 */
@media screen and (width: 320px) {
.steps_anim {
transformscale(0.4266666667);
}
}
@media screen and (width: 360px) {
.steps_anim {
transformscale(0.48);
}
}
@media screen and (width: 414px) {
.steps_anim {
transformscale(0.552);
}
}

这个实现方案A存在明显的缺陷:scale 的值需要写很多断点代码。于是笔者结全一段 js 代码来改善这个实现方案B:

css:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
.steps_anim {
position: absolute;
width360px;
height540px;
backgroundurl(“//misc.aotu.io/leeenx/sprite/m.png”0 0 no-repeat;
background-size1800 540px;
top50%;
left50%;
transform-origin: left top;
margin: –5.625rem 0 0 –5.625rem;
animation: step 1.2s steps(5) infinite;
}
@keyframes step {
100% {
background-position: –1800px;
}
}

 

javascript:

1
2
3
4
5
6
7
8
9
// 以下代码放到 <head></head> 中
<script>
document.write(“<style id=’scaleStyleSheet’>.steps_anim {scale(.5); }</style>”);
function doResize() {
scaleStyleSheet.innerHTML = “.steps_anim {-webkit-transform: scale(“ + (document.documentElement.clientWidth / 750) + “)}”;
}
window.onresize = doResize;
doResize();
</script>

 

通过改善后的方案 CSS 的断点没了,感觉是不错了,不过笔者觉得这个方案不是个纯粹的构建方案。

我们知道 <img> 是可以根据指定的尺寸自适应缩放尺寸的,如果逐帧动画也能与 <img> 自适应缩放,那就可以从纯构建角度实现「构想二」。

SVG刚好可以解决难题!!!SVG 的表现与 <img> 类似同时可以做动画。以下是笔者的实现方案C。

html:

1
2
3
<svg viewBox=“0, 0, 360, 540” class=“steps_anim”>
<image xlink:href=“//misc.aotu.io/leeenx/sprite/m.png” width=“1800” height=“540” />
</svg>

 

css:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
.steps_anim {
position: absolute;
width9rem;
height13.5rem;
top50%;
left50%;
margin: –5.625rem 0 0 –5.625rem;
image {
animationstep 1.2s steps(5) infinite;
}
}
@keyframes step {
100% {
transformtranslate3d(-1800px, 0, 0);
}
}

 

方案C的改良

实现方案C很好地解决了方案A和方案B的缺陷,不过方案C也有它的问题:不利于自动化工具去处理图片

自动化工具一般是怎么处理图片的?
自动化工具一般是扫描 CSS 文件找出所有的 url(...) 语句,然后再处理这些语句指向的图片文件。

如果 <image> 可以改用 CSS 的 background-image 就可以解决这个问题,不过 SVG 不支持 CSS 的 background-image。但是,SVG有一个扩展标签:foreignObject,它允许向 <svg></svg> 插入 html 代码。在使用它前,先看一下它的兼容情况:

caniuse

iOS 与 Android 4.3 一片草绿兼容情况算是良好,笔者实机测试腾讯 X5 内核的浏览器兼容仍旧良好。以下是改良后的方案。

html:

1
2
3
4
5
<svg viewBox=“0, 0, 360, 540” class=“steps_anim”>
<foreignObject class=“html” width=“360” height=“540”>
<div class=“img”></div>
</foreignObject>
</svg>

 

css:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
.steps_anim {
position: absolute;
width9rem;
height13.5rem;
top50%;
left50%;
margin: –5.625rem 0 0 –5.625rem;
}
.html {
width360px;
height540px;
}
.img {
width1800px;
height540px;
backgroundurl(//misc.aotu.io/leeenx/sprite/m.png) 0 0 no-repeat;
background-size1800px 540px;
animation: step 1.2s steps(5) infinite;
}
@keyframes step {
100% {
background-position: –1800px 0;
}
}

微信图片_20210425092605.jpg

宜阳网站制作要多少钱域名企业邮箱服务器注册申请办理宜阳网络优化公司哪家好、宜阳软件开发外包价格、宜阳高端企业网站页面制作设计专业公司、宜阳微信公众号小程序购物支付搭建制作公司

400-111-6878
服务热线
顶部

备案号: 苏ICP备11067224号

CopyRight © 2011 书生商友信息科技 All Right Reserved

24小时服务热线:400-111-6878   E-MAIL:1120768800@qq.com   QQ:1120768800

  网址: https://www.768800.com  网站建设上往建站

关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|

企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|

400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 昌平殡葬| 朝阳殡葬|

预约专家

欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系

  

服务热线:400-111-6878