三年前,滨海之边马上毕业的老少年

经过几天半死不活的思考之后决定干前端

那个时候为了面试各种css属性js API背的是滚瓜烂熟

然后投简历,企业要项目经验,

我没有工作我哪来的项目经验啊

没人会管你为什么没有

so

自己编呗,于是乎为了炫技,为了证明自己开始了我的第一个自己给自己找需求的项目  ,他有个一吊炸天的项目名称

还有我辛苦的汗水结晶。

为了吸引别人的眼光  首先得弄一个超级醒目得banner,怎么弄呢,别人的都是平面得 我就弄成立体得,于是乎四处找资料,最终弄成了一个如下图所示得banner:给你来个俯视图得角度

然后实际得显示效果是酱紫:

怎么做到的呢,实际就是将一个元素得transform-style设置成preserve-3d  这个属性允许他的子元素在一个3d空间中以一种以立体得方式呈现而不是跟平面一样,然后将子元素,对于这个banner来说就是六张图,绝对定位至同一中心点,然后分别旋转0,60,120,。。。,360这种角度,然后再给个translateZ让他们在z轴撑开,这样就是一个3d得展示效果咯。

其实那个时候遇到得一个难点是让这个3dbanner适配各种大小的屏幕,移动端先不说,pc端浏览器的宽度就是五花八门的,还有另外一点就是得让这个banner居中

年少的我,那个时候为了适配直接将某些值写死的   这样的活其实在大小屏上呈现的效果会差很多,而且最为重要的一点是,在没有进行适配的屏幕上,效果可能会很差。

关于怎么布局,以及其他细节可以查看张鑫旭的这篇文章,着此进行的一些小修改就是将原有的写死的数值改成百分比,然后图片上的translateZ采用js动态计算,然后居中banner的时候也是,为了使其居中,给整个banner的容器给一个left,这个值得大小等于容器的大小减去图片的宽度再除以2.

关于translateZ的计算:

因为实际是一个等边六边形嘛,所以θ的大小等以 (360 / 6)/2,然后translateZ的大小就是 (x/2) / tanθ 还挺简单。

整体上来说没有太过复杂的处理,额外注意的一点是,居中那个banner,如果无法使内部的图片元素宽度等于包围他父级元素的时候  保持旋转居中的时候是很困难的,但是为了凸显一个立体的事物我们自然需要使得父元素的内能显示当前正面的一长图片,还有两侧的侧面,这个时候就需要一个技巧,就是在父元素外层再包一层元素,然后我们的居中操作在这个元素上设置,就是上面说的设置left值,这样的话既能保证图片的宽度与父级是一致的,也同时满足了立体的显示效果。

预览地址

技术讲解完毕,以下是牢骚时间。

现在再去看以前写过的东西,那些曾经引以为豪的

绞尽脑汁  去创造的

以及那时不能完美的解决的

好像都变得平平淡淡

额外一件值得开心的事情是 现在得我能解决以前得自己不能完美解决得东西了,这种感觉很舒服~

时间过得真快。

朝花夕拾,帮三年前的自己改bug的更多相关文章

  1. 为什么程序员老在改 Bug,就不能一次改好吗?

    程序员的日常三件事:写Bug.改Bug.背锅.连程序员都自我调侃道,为什么每天都在加班?因为我的眼里常含Bug. 但是真的有这么多Bug要改吗?就不能一次改完吗? 程序员听这问题后要拍键盘了,还!真! ...

  2. 曹工改bug:cpu狂飙,old gc频繁,线程神秘死亡连环案件调查报告

    曹工改bug:cpu狂飙,old gc频繁,线程神秘死亡连环案件调查报告 前言 前两天,访问开发环境上一个java服务,发现一直转圈圈,因为我开着fiddler,可以看到的现象是,接口一直没返回:本来 ...

  3. 改bug的乐趣

    一直以来,我都不喜欢改bug,不管是自己的,还是别人的.因为我不相信自己的代码会出现问题,一旦出现问题我就会觉得很难堪,因为我觉得我的代码没什么问题.然后我就不知道该怎么来解决这些问题. 最近这一两次 ...

  4. 乐动ld06激光雷达sdk改bug记录分享

    前言: 工作中,有使用过乐动ld06款激光雷达,此款雷达将常规雷达的转动的电机部分内置于自己的保护罩内,减少了雷达本身转动积灰等其他外界影响,探测半径是12m,是一款不错的雷达. 不过今天的主要内容不 ...

  5. android软件简约记账app开发day08-时间对话框的书写+改bug,改bug

    android软件简约记账app开发day08-时间对话框的书写+改bug,改bug 绘制对话跨页面 在添加记账信息功能中,我提供了用户添加备注添加事件的功能,设计是点击时间会弹出一个时间对话框供用户 ...

  6. 11号了,还有三天上线-改bug

    +(NSDictionary *)replacedKeyFromPropertyName { return  @{ @"doctorId": @"id" }; ...

  7. java基础梳理--朝花夕拾(三)

    1.了解面向对象的编程思想以及面向对象的特性: 对象: EveryThing is Object: 万物皆是对象,在程序中,我们可以将类.接口.方法.属性等都认为是对象: 面向对象: 是一种程序设计方 ...

  8. Salesforce LWC学习(三十三) lightning-datatable 翻页bug处理

    本来lightning-datatable这种标签,基本上任何的项目都会用到而且很精通,所以当时感觉没有太大的单独一篇写的必要,在Salesforce LWC学习(三十) lwc superbadge ...

  9. git学习笔记09-bug分支-自己的分支改到一半了-要去改bug怎么办?

    当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交: 并不是你不想提交,而是工作只进行到一半,还没法 ...

  10. 一次精疲力尽的改bug经历

    一.介绍 最近一直在做有关JavaScriptCore的技术需求,上周发现一个问题,当在JavaScriptCore在垃圾回收时,项目会有一定几率发生崩溃.崩溃发生时调用堆栈如下: 图1 调用堆栈 先 ...

随机推荐

  1. Windows 10 下编译 64 位 OpenJDK 8 并单步调试

    Windows 10 下编译 64 位 OpenJDK 8 软件版本 操作系统:Windows 10 Cygwin:3.5.4-1 Visual Studio:2010 英文版 freetype: 2 ...

  2. Unity 3D简单使用C#脚本,脚本的生命周期

    Unity 3D简单使用 新建项目->层级里右键->创建空对象改名Test 项目里右键创建C#脚本Test 双击脚本Test(所有脚本都会继承MonoBehaviour类),在Start( ...

  3. Qt编写地图综合应用25-echart动态交互

    一.前言 之前用echart组件做过各种效果,随着各种现场应用现场项目的增多,各种需求也都慢慢增加起来,为了满足各种不同类型的需求,近期又抽空重新整理和封装了echart类,主要就是增加了不少的js函 ...

  4. [转]Windows10+VS2013+OpenCV3.0开发环境搭建配置

    首先要说明一下:不管VS(Visual Studio)的版本是什么,也不管OpenCV的版本是什么,配置都大同小异.所以如果您希望在Window下配置OpenCV的开发环境,那么仔细阅读学习这篇文章即 ...

  5. MySql中MySqlParameter的用法

    在C#中,向表person插入一条数据(表person包括两列:id和name),使用MySqlParameter定义表中各列的值. static void Main(string[] args) { ...

  6. kubernetes系列(二) - kubectl的入门操作

    目录 1. 安装 / 卸载 1 .1 前提条件 1.2 安装方式 1.3 卸载 2. 通过 minikube 学习 k8s 实操基础 2.1 创建集群 2.2 部署应用 2.3 探索当前应用[故障排除 ...

  7. python基础应用

    pip的使用 升级pip python3 -m pip install --upgrade pip 镜像源设置 查看镜像源 pip config list 指定镜像源更新依赖 pip3 install ...

  8. 【Windows】终端配置代理

    Windows cmd 设置代理 设置 HTTP 代理: set http_proxy=http://127.0.0.1:7890 & set https_proxy=http://127.0 ...

  9. 状压 DP 做题记录

    1.普通状态压缩 DP oi-wiki I.P1896 [SCOI2005] 互不侵犯 \(f_{i,j,st}\) 表示前 \(i\) 行中放置了 \(j\) 个国王,当前行状态为 \(st\) 的 ...

  10. DateTimeExtensions:一个轻量C#的开源DateTime扩展方法库

    推荐一个专门为System.DateTime编写的扩展方法库. 01 项目简介 该项目主要是为System.DateTime和System.DateTimeOffset的编写的扩展方法,包括自然日期差 ...