wangpin34 / blog

个人博客, 博文写在 Issues 里
5 stars 0 forks source link

周记 2019/8/16: Threejs 和 parallax scrolling #42

Open wangpin34 opened 5 years ago

wangpin34 commented 5 years ago

为什么开始同时接触这两个八杆子打不着的东西?

原因是我目前负责的一个 web app 需要添加点高级的玩意,让原本偏呆板的页面变得更加灵动一点。我觉得 parallax scrolling 还可以接受,代价不高,尽管我认为在用户 profile 页面提供这样的视觉体验并不合适。而 引入 webgl 所带来的复杂度就高多了,还要考虑兼顾多平台的响应式页面。这并不是我的强项,所以短期内要有建树还是挺难的。

Threejs

虽然 Threejs 是一个 js 框架,但这没有让我觉得它很容易。因为从本质上来说,Threejs 是使用 js 封装的 opengl,核心是 opengl 而非 js。这和一般的 js 框架如 reactjs 根植于 web 基础是完全不一样的。你会在 reactjs 这样的框架中接触到很多新的概念如 jsx,form,但无论是外貌还是内在,它们都和web前端固有的知识体系密不可分,某种程度上完全可以看作是后者的另一种表现形式。这就像方便面和普通面条,本质上都是面食,熟悉方便面的人不太可能会对烹饪普通面条的办法有任何理解上的障碍。

相反的是,Threejs 所介绍的新概念,material,texture,camera,等等,它们都来源于 opengl 而和web 世界没有什么关系。如果没有掌握这些概念,那就会和我一样,文档上讲的理所当然,我却只能一脸懵逼。因此,挣扎一番后,我放弃了阅读文档学习 API,转而去理解一些基础概念。

所以,先记录下此刻我对几个核心概念的理解吧。

parallax scrolling

parallax(视差) 从技术层面上讲并不深奥。

  1. 通过设置 background-attachment:fixed 固定背景图片使其与内容分离,从而在滚动页面时形成视觉上的速度差异。
  2. 设置 3d 物体的 z 轴 (相对于屏幕垂直)坐标,使其相对远离其他内容,从而在滚动页面时形成视觉上的速度差异。

parallax 的难点并不在于技术,虽然我承认 2 所涉及的三角函数让我不禁感叹「都还给老师了」。相对于上面的 Threejs,并不需要挖空心思理解那些新概念。

真正的难点在于设计层面,如何让 parallax 看起来确实提升了用户体验而不是浮夸的炫技?说实话我自己也阅览了很多应用 parallax 的站点,好坏参半。好的且不说,那些坏的,并非是因为动画生涩,素材不佳,而是,我看了半天,也不知道它说了什么。这也是很多资深设计师傅所说的,parallax 其实是讲故事的好工具。用得不好,故事讲的不明白,那不如老老实实的用传统的办法。