iPhone 12 页面卷动逐行滑入效果(1),前端架构师之路

本文介绍了如何使用CSS的mask-image属性制作iPhone图片遮罩,并展示了与React和Vue在状态管理、组件特性等方面的区别。作者还分享了前端开发资源,包括学习资料和项目实战。
摘要由CSDN通过智能技术生成

再加入 #hardware 选择器,设定宽度和高度是 100%,然后背景图片,载入 iPhone 的机身图片,为了支援 Retina Display 高清屏幕,这张图片的尺寸是两倍大小,所以设定 background-size,宽度和高度同样等于变量的设定值。

好了,在这里想介绍一个图片遮罩的 CSS 属性,大家会发现现在 iPhone 的四周,圆型边框背后有个黑色背景:

而我发现 Apple 特地准备了一张遮罩图片,画出了 iPhone 的外型,用白色填充,而圆型边框的四周是透明的:

我们可以通过 mask-image 这个属性将遮罩图片套用上去。由于这个 CSS 属性还在试验阶段,所以要加上 -webkit 前缀的版本,与背景图片一样,图片是两倍大小,所以同样需要将遮罩的大小设定一下,将 mask-size 设定为变量的值,并且加上 -webkit 前缀的版本。

现在可以看到遮罩已经成功套用上,iPhone 的黑色背景不见了。至于为何 Apple 不直接将 iPhone 图片的背景设定为透明?我估计是为了优化图片的大小,因为透明底的图片需要用到 PNG 格式,而这么大张的彩色 PNG 图片容量上比起 JPG 会大不少,所以 Apple 就采用了高压缩比的 JPG 格式作为 iPhone 图片,再准备一张只有单色的 PNG 图片来做遮罩,这样的确可以省下不少网络频宽。

好了,介绍完这个属性,可以加入 body 选择器,将背景颜色设定为黑色,margin 设定为 0,然后将网页的内容上下左右置中:

  • display 设定为 flex

  • flex-direction 设定为 column

  • justify-content 设定为 center

  • align-items 设定为 center

  • min-height 设定为 100vh

字体设定为 Helvetica,再加入一些 padding,设定上下是 4rem,左右是 0

再设定一下标题的样式,加入 h2 选择器,文字颜色设定为灰色,text-align 设定为 center 将它置中,文字大小设定为 4.5rem,文字粗度是 600。然后 margin 设定为上下 6rem,左右 0

加入 h2 p 选择器,设定副标题的样式,margin 设定为 0,文字颜色设定为白色就可以了。

框架大置上设定好了,下一步就设定 iPhone 画面的内容。

在 #ui 里面加入一张图片,是画面顶部的 UI,然后就是每一行资料的图片,我会用 <ul>列表去建构它,加入 <li>,内容是一张图片,总共有 7 行。

回到 CSS 的部份,加入 #ui 选择器,position 设定为 absolutetop 设定为 0。然后要将它左右置中,先将 left 设定为 50%,再将 transform 设定为 translateX(-50%)就可以了。

加入 #ui .top-ui 选择器,设定顶部 UI 图片的定位。display 设定为 block,宽度从变量中获取,高度是 auto,然后 margin,设定上方是 70px,左右是 auto,下方是 0。再加一点 padding-bottom,设定为 30px,以及一条下边框线。

来到列表的部份,加入 #ui ul 选择器,将 list-style 设定为 none,取消列表的样式,margin 和 padding 设定为 0

再设定里面的图片的样式,加入 #ui ul li img 选择器,设定 display 是 block,宽度从变量中获取,高度是 automargin 设定为上下 10px,左右 autopadding-bottom 是 10px,然后再加一条下边框线。

现在界面基本上已设定好了,接下来处理动画的部份。

动画的部分


我们先了解一下这个动画的原理,它是在页面卷动的时候,一行一行的由大至小滑入至列表中,先试试在 CSS 中将效果实现出来。

加入 #ui ul li img:hover 选择器,设定 transform 为 scale(1.8),然后 opacity 设定为 0。在 #ui ul li img 选择器内加入 transition: .25s transform ease-in-out;,现在试试将游标移至其中一行,就可以实现将图片由放大至缩小,回到列表中的效果。

再加一些位移,例如 translateY() 设定为 -60px,效果大致上是这样:

不过这个动画并不是由游标触发,是随着页面卷动时触发,并且可以通过卷动控制动画的进度,所以我会通过 JavaScript 计算目前页面卷动了多少,然后再设定对应行数的 transform和 opacity

为了简化 JavaScript 对 CSS 样式的设定,我想先在 CSS 这边做一个设定值,用来控制一行动画的进度。

先将 hover 和 transition 的设定值移除,然后在 HTML 里面,在第一个 li 那里加入 style,设定 --progress 是 0.5

--progress 是我自己定义的 CSS 变量,我想在它的设定值为 0 时将 scale() 设定为 1.8,以及 opacity 设定为 0;而在它的设定值为 1 的时候,将 scale() 设定为 1opacity 设定为 1。做到像是一个动画的开关的功能,那么我们在 JavaScript 那边,只需要调整这个 --progress 就可以控制动画。

在 #ui ul li img 里面,加入 transform,先设定 scale(),将 1.8 减去 0.8 * var(--progress),这样在 --progress 为 1 的时候,scale 就是 1;而 --progress 为 0 的时候,scale 就是 1.8 了。

再来 translateY(),将 -60px 乘以 1 \- var(--progress),这样在 --progress 为 1时,translateY 就是 0;而 --progress 为 0 的时候,translateY 就是 -60px

再将 opacity 直接设定为 --progress 的值,0 的时候会将它隐藏,1 的时候它就会显示。试试调整一下 --progress 的值,大家就可以看到这个设定值的具体作用了。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

img
img

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V:vip1024c 备注前端获取(资料价值较高,非无偿)
img

react和vue的比较

相同
1)vitual dom
2)组件化
3)props,单一数据流

不同点
1)react是jsx和模板;(jsx可以进行更多的js逻辑和操作)
2)状态管理(react)
3)对象属性(vue)
4)vue:view——medol之间双向绑定
5)vue:组件之间的通信(props,callback,emit)

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

act是jsx和模板;(jsx可以进行更多的js逻辑和操作)
2)状态管理(react)
3)对象属性(vue)
4)vue:view——medol之间双向绑定
5)vue:组件之间的通信(props,callback,emit)

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

[外链图片转存中…(img-1CVscTp7-1711550895982)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值