朝花夕拾,帮三年前的自己改bug
三年前,滨海之边马上毕业的老少年
经过几天半死不活的思考之后决定干前端
那个时候为了面试各种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的更多相关文章
- 为什么程序员老在改 Bug,就不能一次改好吗?
程序员的日常三件事:写Bug.改Bug.背锅.连程序员都自我调侃道,为什么每天都在加班?因为我的眼里常含Bug. 但是真的有这么多Bug要改吗?就不能一次改完吗? 程序员听这问题后要拍键盘了,还!真! ...
- 曹工改bug:cpu狂飙,old gc频繁,线程神秘死亡连环案件调查报告
曹工改bug:cpu狂飙,old gc频繁,线程神秘死亡连环案件调查报告 前言 前两天,访问开发环境上一个java服务,发现一直转圈圈,因为我开着fiddler,可以看到的现象是,接口一直没返回:本来 ...
- 改bug的乐趣
一直以来,我都不喜欢改bug,不管是自己的,还是别人的.因为我不相信自己的代码会出现问题,一旦出现问题我就会觉得很难堪,因为我觉得我的代码没什么问题.然后我就不知道该怎么来解决这些问题. 最近这一两次 ...
- 乐动ld06激光雷达sdk改bug记录分享
前言: 工作中,有使用过乐动ld06款激光雷达,此款雷达将常规雷达的转动的电机部分内置于自己的保护罩内,减少了雷达本身转动积灰等其他外界影响,探测半径是12m,是一款不错的雷达. 不过今天的主要内容不 ...
- android软件简约记账app开发day08-时间对话框的书写+改bug,改bug
android软件简约记账app开发day08-时间对话框的书写+改bug,改bug 绘制对话跨页面 在添加记账信息功能中,我提供了用户添加备注添加事件的功能,设计是点击时间会弹出一个时间对话框供用户 ...
- 11号了,还有三天上线-改bug
+(NSDictionary *)replacedKeyFromPropertyName { return @{ @"doctorId": @"id" }; ...
- java基础梳理--朝花夕拾(三)
1.了解面向对象的编程思想以及面向对象的特性: 对象: EveryThing is Object: 万物皆是对象,在程序中,我们可以将类.接口.方法.属性等都认为是对象: 面向对象: 是一种程序设计方 ...
- Salesforce LWC学习(三十三) lightning-datatable 翻页bug处理
本来lightning-datatable这种标签,基本上任何的项目都会用到而且很精通,所以当时感觉没有太大的单独一篇写的必要,在Salesforce LWC学习(三十) lwc superbadge ...
- git学习笔记09-bug分支-自己的分支改到一半了-要去改bug怎么办?
当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交: 并不是你不想提交,而是工作只进行到一半,还没法 ...
- 一次精疲力尽的改bug经历
一.介绍 最近一直在做有关JavaScriptCore的技术需求,上周发现一个问题,当在JavaScriptCore在垃圾回收时,项目会有一定几率发生崩溃.崩溃发生时调用堆栈如下: 图1 调用堆栈 先 ...
随机推荐
- Vue3封装一个ElementPlus自定义上传组件2--无弹窗
Vue3封装一个ElementPlus自定义上传组件2--无弹窗 写在前面: 无弹窗的上传组件它来了,依旧是小巧又好用,只不过这回我用的是前端直传的方式,采用http-request进行文件上传,中间 ...
- Qt开发经验小技巧196-200
关于Qt延时的几种方法. void QUIHelperCore::sleep(int msec) { if (msec <= 0) { return; } #if 1 //非阻塞方式延时,现在很 ...
- Error: Assertion failed (nimages > 0) in cv::calibrateCameraRO, file D:\opencv4\opencv\opencv-4.1.0\modules\calib3d\src\calibration.cpp, line 3691
报错信息: Error: Assertion failed (nimages > 0) in cv::calibrateCameraRO, file D:\opencv4\opencv\open ...
- 海量用户IM聊天室的架构设计与实践
本文由网易云信资深服务端开发工程师曹佳俊分享,本文收录时有内容修订和重新排版. 1.引言 聊天室是一类非常重要的 IM 业务形态,不同于单聊和群聊,聊天室是一种大规模的实时消息分发系统.聊天室有多种技 ...
- 使用ollama玩转本地大模型
使用ollama玩转本地大模型 https://ollama.com/download 安装 安装验证 测试 ollama run llama2 ollama run qwen
- Solution -「洛谷 P8477」 「GLR-R3」春分 下界证明?!
前情提要:在「洛谷 P8477」 「GLR-R3」春分中,我们给出了 \(\frac{7}{6}n\pm\mathcal O(1)\) 的解法,但没能给出相关的下界证明.现在我们尝试给出一个未完全 ...
- 部署 Browser-Use WebUI + DeepSeek 实现浏览器AI自动化
一.安装部署 1.安装 python3.11 或以上版本 2.安装browser-use pip install browser-use 3.安装 Playwright playwrigh ...
- linux:用户管理
用户账号添加.删除.修改以及用户密码的管理 用户组的管理 涉及三个文件: /etc/passwd :存储用户的关键信息 /etc/group :存储用户组的关键信息 /etc/shadow :存 ...
- uni-app组件 信息列表组件
之前我一直在,要想提高自己的代码质量, 就一定要封装自己的组件, 所以我就尽量使用自己的组件.这样可以提高自己的效率 写组件的好处:减少代码的冗余 封装组件的时候,为了不让子元素的padding, 影 ...
- TCP/IP协议栈封装解封装过程
发送方将用户数据提交给应用程序把数据送达目的地,整个数据封装流程如下: 用户数据首先传送至应用层,添加应用层信息: 完成应用层处理后,数据将往下层传输层继续传送,添加传输层信息(如TCP或UDP,应用 ...