半自动文字海报生成小工具(字数&模版限定款)【CSS畅想】

举报
叶一一 发表于 2023/02/22 20:29:53 2023/02/22
【摘要】 试玩咯 🎮输入文字,点击确定,便可以生成一张海报。试玩一把先来一个诗词版果然诗词版美的很特别。灵感来源 我看《经典咏流传》这个,本来想实现后面的背景墙,但是找素材的时候,意外看到了文字海报,就来了灵感。文字海报这个主意好像不赖。半自动文字海报 🦭半自动之所以说是半自动,因为文字顺序是固定的。文字是可以随意输入,20个字以内,最终文字的展示效果是按照提前布设置好的排版。所以说这是个半自动的...

试玩咯 🎮

输入文字,点击确定,便可以生成一张海报。

试玩一把

先来一个诗词版

果然诗词版美的很特别。

灵感来源

我看《经典咏流传》这个,本来想实现后面的背景墙,但是找素材的时候,意外看到了文字海报,就来了灵感。

文字海报这个主意好像不赖。

半自动文字海报 🦭

半自动

之所以说是半自动,因为文字顺序是固定的。

文字是可以随意输入,20个字以内,最终文字的展示效果是按照提前布设置好的排版。所以说这是个半自动的文字海报。

我起身,踱了几步,觉得以后应该是有几率做成排版自动化。

排版

海报里面的文字有四种展示效果,四种展示效果又可以分成两个大类,这种情况一般就用少数服从多数的方式。

  • 全部定义成公共样式,然后在将特殊样式一一重置。
  • 五个较大的模块带内部边框,其他不带边框。
  • 元素的内部边框,还是老法子,用伪元素实现。
.block {
  width: 36px;
  height: 36px;
  line-height: 36px;
  background: #4895f6;
  position: absolute;
  text-align: center;
  color: #f6e5bf;
  font-size: 20px;
  font-weight: 600;
}
.block1,
.block2,
.block3,
.block4,
.block5 {
  width: 70px;
  height: 70px;
  line-height: 70px;
  font-size: 56px;
}
.block1::before,
.block2::before,
.block3::before,
.block4::before,
.block5::before {
  content: '';
  border: 1px solid #1b3389;
  position: absolute;
  left: 3px;
  top: 3px;
  width: 62px;
  height: 62px;
}

操作

操作

功能内容

输入

直接输入内容

确定

1、如果输入内容为空,提示:请输入内容。

2、如果输入内容长度超过20,提示:输入内容需要20字以内。

清除

1、清空输入框。

2、清空海报内容。

文字长度判断

长度判断的范围是0到20,前开后闭,即(0,20]。

if (!textVal) {
  tipsVal = '请输入内容';
  tipsFlag = true;
}
if (textVal.length > 20) {
  tipsVal = '输入内容需要20字以内';
  tipsFlag = true;
}

清空公共方法

数据重置主要包括:

  • 清空输入框信息;
  • 清空提示信息,重置提示判断布尔值。
// 数据重置
function restVal() {
  textInput.value = '';
  tips.innerHTML = '';
  tipsVal = '';
  tipsFlag = false;
}

文字安置

去重&特殊字符

获取最终文字之前,我先进行了去重操作和特殊字符的判断。

  • 去重使用正则匹配即可。
  • 得到去重之后的字符串,使用split方法转换成数组,然后在进行去除特殊字符的处理。
  • 特殊字符,正则匹配不好写,所以我用的排除的方式,设置了一个需要排除的数组,进行了一遍过滤。
// 去掉全部空格
function trim(str) {
  return str.replace(/\s+/g, '');
}
let list = textVal.split('');
let listNew = [];
let punctuateList = [',', '。', ',', ';', '(', ')', '(', ')'];
list.forEach((item, index) => {
  // 排除特殊符号
  if (!punctuateList.includes(item)) {
    listNew.push(item);
  }
});


文字位置安置

处理之后的文字数组,即最后的展示顺序。页面布局的顺序是固定的,按照数组顺序,一一对应,回显相对应的排版位置。

listNew.forEach((item, index) => {
  let inx = index + 1;
  let blockItem = blockObj[inx];
  blockItem.style.display = 'block';
  blockItem.innerHTML = item;
});

未完待续

模板种类待扩展,如果像专门的海报生成器一样,提供各式各样的海报类型,就完美了。

作者:非职业「传道授业解惑」的开发者叶一一
简介:「趣学前端」、「CSS畅想」系列作者,华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。