做了件有意义的小事

在前面关于 grid 布局写了 3 篇文章:

第8天:布局翘楚 - Grid 布局概述

第10天:买一块地盖一处院子

第11天:grid布局对齐属性

从这三篇文章中你能够感受到 grid 布局的强大之处,相比 FlexBox 布局,它更灵活。gird 布局其实就是一张”excel 表格“,你所做的就是把不同元素放到这张表格中,每个元素可占用任意个单元格。总之,这种二维布局更灵活。

在看 element-ui 的时候,发现它也提供了一种类似于 grid 的布局方式,不过它底层使用的是 flexbox 布局,用起来非常方便,如果你还没用过,强烈推荐用一下。

比如实现类似于这种布局:

<el-row :gutter="20">
  <el-col :span="16"><div></div></el-col>
  <el-col :span="8"><div></div></el-col>
</el-row>
<el-row :gutter="20">
  <el-col :span="8"><div></div></el-col>
  <el-col :span="8"><div></div></el-col>
  <el-col :span="4"><div></div></el-col>
  <el-col :span="4"><div></div></el-col>
</el-row>
<el-row :gutter="20">
  <el-col :span="4"><div></div></el-col>
  <el-col :span="16"><div></div></el-col>
  <el-col :span="4"><div></div></el-col>
</el-row>


grid 布局千好万好,但初学者学起来并不容易,今天我在前端小课网站中实现了一个带交互的 grid 布局,你可以动动手指即能够看到布局的具体表现。

比如关于行列的定义,你可以在输入框输入不同的值来实时看到不同的布局效果:

关于布局区域,我当时学的时候还特意写了一篇故事 第10天:买一块地盖一处院子,今天我们再用上可视化,效果更佳:

关于元素的对齐方式,也能够帮你更直观地看到布局效果:

总之,我觉得这是一件很有意义的事情,有兴趣的朋友可以在前端小课网站体验:https://lefex.gitee.io/。

关于 flexbox 布局,可以看 带交互的 flex 布局教程,不懂都难。大家加油!

长按关注

素燕《前端小课》

帮助 10W 人入门并进阶前端

官网:https://lefex.gitee.io/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个有趣的问题。我们可以通过使用函数指针数组和定时器来实现一个状态机。具体步骤如下: 1. 定义三个状态对应的函数,每个函数要一件惊天动地的事情。 2. 定义一个函数指针数组,将这三个状态函数指针存入数组中。 3. 定义一个变量表示当前状态的索引,初始值为0。 4. 使用定时器,每隔1秒钟自动执行一个函数,该函数将当前状态索引加1,并通过函数指针数组调用对应的状态函数。 5. 在第100次状态切换时,将当前状态索引设置为2(即状态3)。 6. 在第2221次状态切换时,将当前状态索引设置为原索引值+21,并从函数指针数组中删除一个状态函数指针,具体删除哪个函数指针可以随机选择。 7. 改变状态切换方式为键盘输入空格,即每次按下空格键时,将当前状态索引加1,并通过函数指针数组调用对应的状态函数。 下面是实现代码: ```c++ #include <iostream> #include <functional> using namespace std; void state1() { cout << "State 1: 惊天动地的事情1" << endl; } void state2() { cout << "State 2: 惊天动地的事情2" << endl; } void state3() { cout << "State 3: 惊天动地的事情3" << endl; } int main() { function<void()> stateFuncs[] = {state1, state2, state3}; int stateIdx = 0; int count = 0; while (true) { count++; // 每隔1秒钟自动切换状态 if (count % 1000 == 0) { stateIdx = 2; // 第100次切换为状态3 for (int i = 0; i < 21; i++) { stateFuncs[stateIdx + i] = []() { cout << "New state: 惊天动地的新事情" << endl; }; } stateFuncs[rand() % 3] = nullptr; // 随机删除一个函数指针 } else { // 等待键盘输入空格切换状态 if (cin.get() == ' ') { stateIdx++; if (stateIdx >= 3 && count >= 2221) { stateIdx = (stateIdx + 21) % 24; } else { stateIdx %= 3; } } } // 调用对应的状态函数 if (stateFuncs[stateIdx] != nullptr) { stateFuncs[stateIdx](); } } return 0; } ``` 需要注意的是,该代码缺少异常处理和线程同步等保护机制,实际应用中需要进行进一步完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值