

产品经理:你能不能用div给我画条龙?
source link: https://juejin.cn/post/6963476650356916254
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

事情是这样的,前天上午产品经理说想要做一个心愿墙,问我能不能行
我心想,这太容易了,但为了多摸一天鱼,我说还是有点挑战的
结果下午,产品经理和设计师就给我发来了设计参考
他们说,心愿墙的设计大致是这样的,每个用户的心愿都是一个气泡,而客户的品牌是”龙“,我们希望在前端页面里用气泡呈现一个龙形的设计,每个气泡都会浮动,鼠标移上去变大,点击后展示心愿详情。
当时我的内心是这样的
我摸鱼的一天要泡汤了吗?
谁都不能阻止我摸鱼
但首先要解决最核心的问题
龙从哪里来?
设计师说了,他可以给我一条由气泡组成的龙的设计稿,我说那等你设计稿给我,我再研究把。结果他说,已经有了,你就用这个吧
我的刀呢?
请在评论区留下你遇到过的最奇葩的需求
遇到不靠谱的产品经理和设计师,前端工程师真是惨。我们顶着最后交付成品的巨锅
,所有deadline
感觉都只是用来压榨前端工程师的。
我们只能靠自己,因为
谁都不能阻止我摸鱼
- 需求1:有鼠标交互效果(太简单)
- 需求2:气泡要浮动(css动画,easy)
- 需求3:气泡组成一条龙
此时我脑海里响起这首烂大街的歌
左边跟我一起画个龙,在你右边画一道彩虹~
诶,画个龙
用什么画,canvas
canvas能获得指定区域的像素点阵
卧槽,有招儿了
先用图片搜索找一张龙的剪影
将图片绘制到canvas中
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var image = new Image();
image.src = "dragon.jpg";
image.onload = function(){
canvas.width = image.width;
canvas.height = image.height;
ctx.drawImage(image,0,0);
}
复制代码
获取并裁剪画布的点阵信息
var imageData = ctx.getImageData(0,0,image.width,image.height).data;
ctx.fillStyle = "#ffffff";
ctx.fillRect(0,0,image.width,image.height);
var gap = 6;
for (var h = 0; h < image.height; h+=gap) {
for(var w = 0; w < image.width; w+=gap){
var position = (image.width * h + w) * 4;
var r = imageData[position], g = imageData[position + 1], b = imageData[position + 2];
if(r+g+b==0){
ctx.fillStyle = "#000";
ctx.fillRect(w,h,4,4);
}
}
}
复制代码
现在我们获得了这样一条龙的点阵信息
通过点阵信息生成气泡dom
var dragonContainer = document.getElementById("container");
var dragonScale = 2;
for (var h = 0; h < image.height; h+=gap) {
for(var w = 0; w < image.width; w+=gap){
var position = (image.width * h + w) * 4;
var r = imageData[position], g = imageData[position + 1], b = imageData[position + 2];
if(r+g+b==0){
var bubble = document.createElement("img");
bubble.src = "bubble.png";
bubble.setAttribute("class","bubble");
var bubbleSize = Math.random()*10+20;
bubble.style.left = (w*dragonScale-bubbleSize/2) + "px";
bubble.style.top = (h*dragonScale-bubbleSize/2) + "px";
bubble.style.width = bubble.style.height = bubbleSize+"px";
bubble.style.animationDuration = Math.random()*6+4 + "s";
dragonContainer.appendChild(bubble);
}
}
}
复制代码
开心摸鱼吧
本例里使用div绘制大量的dom,仅为阐述思路,没考虑性能。利用一些js游戏引擎,比如pixi等,可以很方便的全部交由canvas去绘制并添加交互。
本故事纯属虚构,参考案例来自本人2011年底为客户开发的春节活动网站。
微信搜索并关注“大帅老猿
”,回复泡泡龙
获得源码
Recommend
-
8
产品经理到底能不能去项目外包公司? - PMCAFF产品经理社区 宫本武藏先生 外包一时爽,三十进工厂 ...
-
3
IF 2021 文章转载授权自公众号:工业设计俱乐部 ID:id-club 编辑:秋秋 近期 iF Awar d更新了2 021 年奖项 一直觉得iF在网站方面做的还是不错的 搜索引擎到产品分类 再到每个产品多图片或视频的介绍...
-
8
目前ToB的运营工作还处于混沌的状态,很多小伙伴在找工作的时候也会有类似的疑问,在SaaS的运营过程中,到底能不能用C端的运营手段?今天这篇文章从我分析到的一些经验以及我自己做过的一些项目给大家做解答。
-
5
Linux 能不能用虚拟机跑双系统呢 V2EX › Linux Linux 能不能用虚拟机跑双系统呢
-
10
V2EX › Android MIUI 12 到底还能不能用 google play zcwlwen · 1 天前 · 3325 次点击
-
11
亚马逊宠物类目的Dog Bed产品还能不能做 ...
-
2
【茶包射手日記】Cookie 名稱能不能用 $ 起首?-黑暗執行緒 見識不夠,踩到一個 ASP.NET Cookie 命名地雷。 在某個 ASP.NET 專案用 Response.Cookies.Add() 新增名為 "$myCookie" 的 HttpCookie,之後用 Request.Cookies["$myCookie"]...
-
7
如何判断产品能不能做? 想总结出一套判断模型用于判断要做一个新产品,到底能不能做? 自己也懂一些市场分析模型但不知道哪些是决定性的。
-
6
QCY MeloBuds ANC评测:百元降噪到底能不能用_原创_新浪众测
-
4
V2EX › 问与答 能不能用 SQL 查出没有在数据表里出现的值
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK