【HTML】我的花儿我做主~ 指定花瓣的数量,生成花朵~

news2024/11/24 22:04:02

效果图

花儿我做主3.gif

前言(赛时灵感)

image.png

在比赛开始前,就一直没有灵感,不知道参与哪个赛道。也还不知道用啥去做。

直到比赛开始,还是没想到。

最后在比赛快要结束的第五天三更半夜的时候;

突然想到,既然要浪漫,那浪漫首先想到的就是花,那么花,首先就想到花瓣。

查一下,有没有人做过花瓣生花的呢?

于是乎…

说干就干,开始开发…

准备工作(提取素材)

想到了点子这不难,但是!我前端很拉胯啊!

于是乎…

不会画花,就在掘金里查!css怎么画花!

image.png

这个不错!拿走了!然后,借一下代码(博客地址来源:https://juejin.cn/post/6844903793570611214)

不会画按钮…查!(参考地址来源:https://www.jianshu.com/p/f0234f0d4b33)

不会让花朵旋转起来…查!(如何让css旋转)

不会… 查!…

最后,东查西合,完成!

注意要点

简单说几点

① 想要让花瓣动态,就需要让花瓣是灵活创建

② 一开始做的时候,变颜色、唯一颜色、旋转速度出现数据变化,都是先把数据清空了再重新生成花瓣。但是这样做每次会在出生地点的位置旋转。就是说不续着旋转,很别扭。后来利用 css 样式去控制就好了。

颜色自动变化这个功能,要注意的是在控制清空和继续生成的用法(即:clearInterval()setInterval()用法

仓库地址与体验地址

这里代码片段展示
代码片段


  大家可以直接来笔者的网站来体验
  在线体验(pc端):体验传送门
  仓库地址:暂无(想要的可以直接去扒笔者的网站传送门

完整代码

因为代码比较简单,代码上也有注释,这里就不过多详细描述了。

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <meta name="description" content="南方者, 万花筒, 万色花, 指定数量的花瓣生成花朵, 花瓣">
  <meta name="keywords" content="南方者, 万花筒, 万色花, 指定数量的花瓣生成花朵, 花瓣">
  <title>万色花 - 指定数量的花瓣生成花朵</title>
</head>
<!-- 灵感来源:https://juejin.cn/user/2840793779295133/posts (其实就是自我突发奇想到的一个想法)-->
<!-- 花瓣技术参考:https://juejin.cn/post/6844903793570611214 -->

<body>
  <div id="flowers">
  </div>
  <div class="v-body">
    <div style="display: flex;  justify-content: center;align-items: center;padding-top: 10px;">
      <p>输入花瓣的数量:</p>
      <input type="text" placeholder="(默认8瓣)" class="demoInput" maxlength="16" oninput="peralSumOnchange(this)" />
    </div>
    <div style="display: flex;  justify-content: center;align-items: center;">
      <p>旋转速度的变化:</p>
      <input type="text" placeholder="(默认8秒)" class="demoInput" maxlength="16" oninput="transOnchange(this)" />
    </div>
    <div style="display: flex;  justify-content: center;align-items: center;">
      <p>输入几秒后变化:</p>
      <input type="text" placeholder="(默认5秒)" class="demoInput" maxlength="16" oninput="changeOnchange(this)" />
    </div>
    <div style="display: flex; align-items: center;">
      <font>是否唯一颜色(默认五彩)  </font>
      <label class=" switch">
        <input type="checkbox" checked onclick="switchRamColor()" />
        <span class="slider"></span>
      </label>
    </div>
    <div style="display: flex;  align-items: center;padding-top: 8px;">
      <font>是否自动变化(默认是)   </font>
      <label class=" switch">
        <input type="checkbox" checked onclick="switchChange()" />
        <span class="slider"></span>
      </label>
    </div>
  </div>
</body>

<script>
  var isOneColor = true; // 是否随机颜色(默认是)
  var isChange = true; // 是否变化(默认是)
  var startRamColor = color255();
  var endRamColor = color255();
  var divList = [];

  var changeTime = 5 * 1000; // 自动变化时间(默认5秒)
  var pertalSum = 8; // 花瓣数量(默认8瓣)
  // 生成花瓣
  function getPetal(num) {
    for (var i = 0; i < num; i++) {
      var div = getInitElement("div");
      divList.push(div);
    }
    // console.log(divList);
    var ave = 360 / num; // 平均度数
    var colorMap = new Map();
    for (var i = 0; i < num; i++) {
      var tem = "\'transform: rotate({ave}deg);background: linear-gradient(45deg, {startColor}, {endColor});\'";
      var div = divList[i];
      tem = tem.replace("{ave}", ave * i);
      if (!isOneColor) {
        tem = tem.replace("{startColor}", startRamColor);
        tem = tem.replace("{endColor}", endRamColor);
      } else {
        var startColor = color255();
        var endColor = color255();
        var flag = true;
        while (flag) {
          if (colorMap.get(startColor)) {
            startColor = color255();
          }
          if (colorMap.get(endColor)) {
            endColor = color255();
          }
          if (!colorMap.get(endColor) && !colorMap.get(endColor)) {
            flag = false;
          }
        }
        tem = tem.replace("{startColor}", startColor);
        tem = tem.replace("{endColor}", endColor);
        colorMap.set(startColor, true);
        colorMap.set(endColor, true);
      }
      div.innerHTML = "<div class='petal' style=" + tem + "></div>";
      // div.style = tem
      // console.log(tem);
      // console.log(div);
      flowers.appendChild(div);
    }
    // window.document.body.appendFisrtChild(flowers);

  }
  // var flowers = getInitElement("div");
  var flowers = document.getElementById("flowers");
  console.log(flowers)
  flowers.classList.add("trans");
  flowers.classList.add("geometric-flowers");


  function color255() {
    return "rgb(" + Math.floor(Math.random() * 225) + "," + Math.floor(Math.random() * 225) + "," + Math.floor(Math
      .random() * 225) + ")";
  }

  getPetal(pertalSum);

  function getInitElement(name) {
    var element = document.createElement(name);
    // 注:IE浏览器不支持一下添加多个class
    return element;
  }

  function switchRamColor() {
    isOneColor = !isOneColor;
    // flowers.innerHTML = "";
    // console.log(flowers)
    ramColor();
    // getPetal(pertalSum);
  }


  function ramColor() {
    var divList = flowers.children;
    // console.log(divList)
    var startRamColor = color255();
    var endRamColor = color255();
    for (var i = 0; i < divList.length; i++) {
      var div = divList[i];
      div = div.children[0];
      // console.log(div)
      if (!isOneColor) {
        // div.style.background = "linear-gradient(45deg, " + startRamColor + ", " + endRamColor + ")";
        div.style.setProperty("background", "linear-gradient(45deg, " + startRamColor + ", " + endRamColor + ")");
      } else {
        div.style.setProperty("background", "linear-gradient(45deg, " + color255() + ", " + color255() + ")");
      }
      // div.setAttribute("55", 55);
    }
  }

  var ramColorInterval = setInterval(
    ramColor, changeTime)

  function switchChange() {
    isChange = !isChange;
    if (isChange) {
      console.log("开启")
      ramColorInterval = setInterval(
        ramColor, changeTime)
      return;
    }
    clearInterval(ramColorInterval); // 清除,再重新设置
  }

  // 花瓣数量的输入框监听
  function peralSumOnchange(e) {
    var {
      value
    } = e;
    console.log(value)

    if (value && (value > 2 && value < 100)) {
      flowers.innerHTML = ""; // 花瓣清空,再重新生成花瓣
      pertalSum = value;
      getPetal(pertalSum);
    } else {
      alert("必须是数字且范围在 3~99 之间")
    }
  }

  // 自动变化的输入框监听
  function changeOnchange(e) {
    var {
      value
    } = e;
    console.log(value);
    if (!isChange) {
      alert("请先开启自动变化");
      return;
    }
    if (value && (value > 0 && value < 31)) {
      // flowers.innerHTML = "";
      changeTime = value * 1000;
      clearInterval(ramColorInterval); // 清除,再重新设置
      ramColorInterval = setInterval(
        ramColor, changeTime)
    } else {
      alert("必须是数字且范围在 1~30 之间")
    }
  }


  // 旋转速度的变化输入框监听
  function transOnchange(e) {
    var {
      value
    } = e;
    console.log(value);
    if (value && (value > 0 && value < 31)) {
      // flowers.style.animation = "trans-petal " + value + "s linear infinite;";
      flowers.setAttribute("style", "animation:trans-petal " + value + "s linear infinite;");
    } else {
      flowers.style = "";
    }
    console.log(flowers);
  }
</script>
<style>
  body {
    display: flex;
    justify-content: space-around;
  }

  /* 屏幕适配 */
  /* 小屏幕手机端 */
  @media (min-width: 0px) and (max-width:768px) {
    .geometric-flowers {
      width: 150px;
      height: 150px;
    }

    #flowers {
      padding-left: 100px;
    }

    p {
      font-family: 'Microsoft soft';
      font-weight: 700;
      font-size: 6px;
    }

    font {
      font-size: 6px;
    }

    .v-body {
      padding-top: 200px;
    }
  }

  /* 中等屏幕(桌面显示器,大于等于 992px) */
  @media (min-width: 768px) and (max-width:992px) {
    .geometric-flowers {
      width: 280px;
      height: 280px;
    }

    p {
      font-family: 'Microsoft soft';
      font-weight: 700;
      font-size: 16px;
    }

    font {
      font-size: 12px;
    }

    .v-body {
      padding-top: 100px;
    }

  }

  /* 大屏幕(大桌面显示器,大于等于 1200px) */
  @media (min-width: 992px) {
    .geometric-flowers {
      width: 500px;
      height: 500px;
    }

    p {
      font-family: 'Microsoft soft';
      font-weight: 700;
      font-size: 30px;
    }

    font {
      font-size: 20px;
    }

    .v-body {
      padding-top: 100px;
    }
  }

  /* [好看的纯css 输入框样式 input](https://www.lebang2020.cn/details/220524yi5hgj0h.html) */
  .demoInput {
    outline-style: none;
    border: 1px solid #ccc;
    border-radius: 3px;
    padding: 13px 14px;
    width: 100px;
    font-size: 14px;
    font-weight: 700;
    font-family: "Microsoft soft";
  }

  .demoInput:focus {
    border-color: #66afe9;
    outline: 0;
    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6)
  }

  .geometric-flowers {
    /* top: 40%;
    left: 37%;
    position: fixed; */
    transform: translate(-50%, -50%);
    transition: transform 2s;
    margin-top: 8%;
  }

  .trans {
    animation: trans-petal 8s linear infinite;
  }

  @keyframes trans-petal {
    from {
      transform: rotate(0deg);
    }

    to {
      transform: rotate(360deg);
    }
  }

  html {
    height: 100%;
    width: 100%;
  }

  .petal {
    width: 50%;
    height: 50%;
    /* background: linear-gradient(45deg, #ac08, #f8c8); */
    border-top-left-radius: 100%;
    border-bottom-right-radius: 100%;
    position: absolute;
    left: 50%;
    transform-origin: 0 100%;
  }

  /* https://www.jianshu.com/p/f0234f0d4b33 */
  .switch {
    font-size: 17px;
    position: relative;
    display: inline-block;
    width: 3.5em;
    height: 1.5em;
  }

  .switch input {
    opacity: 0;
    width: 0;
    height: 0;
  }

  .slider {
    position: absolute;
    cursor: pointer;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background-color: #ef6c6c;
    transition: 0.5s;
    border-radius: 30px;
  }

  .slider:before {
    position: absolute;
    content: "";
    height: 1.1em;
    width: 1.1em;
    border-radius: 50%;
    left: 11%;
    bottom: 15%;
    box-shadow: inset 8px -4px 0px 0px #fff000;
    background: var(--background);
    transition: 0.5s;
  }

  input:checked+.slider {
    background-color: rgb(0 159 255 / 75%)
  }

  input:checked+.slider:before {
    transform: translateX(150%);
    box-shadow: inset 15px -4px 0px 15px #38ff1b;
  }

  /* https://juejin.cn/user/2840793779295133/posts by 南方者 */
</style>

</html>

总结

灵感来源于生活,技术来自于借鉴!

以前的小游戏

  • 【HTML】【消失的花木兰】花木兰:三兔蹦迪走,安能辨我是兔子?
  • 【HTML】【休闲益智】还有9块月饼并未获得!请及时出战!(解锁月饼小游戏)
  • 【微信小游戏】合成大灯笼 丨 2022🧭寻找暴富人🧧(首次个人小活动)
  • 【HTML】【休闲益智】真相?真香?只有一个!看看谁是大馋虫 or 贪吃鬼(找出真正吃了月饼的人
  • 【HTML】【休闲益智】还有9块月饼并未获得!请及时出战!(解锁月饼小游戏
  • 更多好玩的游戏

文章小尾巴

文章写作、模板、文章小尾巴可参考:《写作“小心思”》

  感谢你看到最后,最后再说两点~
  ①如果你持有不同的看法,欢迎你在文章下方进行留言、评论。
  ②如果对你有帮助,或者你认可的话,欢迎给个小点赞,支持一下~
   我是南方者,一个热爱计算机更热爱祖国的南方人。
  (文章内容仅供学习参考,如有侵权,非常抱歉,请立即联系作者删除。)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/365324.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

每日学术速递2.23

Subjects: Robotics 1.On discrete symmetries of robotics systems: A group-theoretic and data-driven analysis ​ 标题&#xff1a;关于机器人系统的离散对称性&#xff1a;群论和数据驱动分析 作者&#xff1a;Daniel Ordonez-Apraez, Mario Martin, Antonio Agudo, F…

python中的取整、四舍五入和输出小数点后n位

各种取整 1.int是向下取整 2.math.ceil(num)是向上取整 3.math.floor(num)是向下取整 4.round(num)一般情况下是四舍五入取整&#xff08;round毛病多&#xff09; 四舍五入 1.round()可以四舍五入 2.int()也可以 这样写&#xff08;数后面0.5&#xff09;&#xff1a…

Python 爬虫通用代码框架代码示例

刚开始入门学习python爬虫会遇到各种各样的问题&#xff0c;如果以当时的学识想必处理起来也十分困难&#xff0c;那么&#xff0c;如果你拥有良好的编程习惯会让你轻松很多。 当我们在使用Requests库时经常遇到的问题无非是网络问题&#xff0c;连接的超时问题&#xff0c;或…

设计模式C++实现25:解释器模式(Interpreter)

部分内容参考大话设计模式第27章&#xff1b;本实验通过C语言实现。 一 基本原理 意图&#xff1a;给定一个语言&#xff0c;定义其文法的一种表示&#xff0c;并定义一个解释器&#xff0c;这个解释器使用该表示来解释语言中的句子。 上下文&#xff1a;如果业务规则频繁变…

Netty核心组件创建源码浅析

pipeline&#xff0c;Handler&#xff0c; HandlerContext创建源码剖析 源码解析目标 Netty中的ChannelPipeline&#xff0c;ChannelHandler和ChannelHandlerContext是核心组件&#xff0c;从源码解析来分析 Netty是如何设计三个核心组件分析Netty是如何创建和协调三个组件三…

LQB05 数码管动态扫描,显示字符串

1、蓝桥杯51单片机开发板的数码管是共阳数码管&#xff1b; 需要注意段码表的推导。 掌握推导段码表。 2、stcisp软件的数码管代码&#xff0c;是共阴的模式&#xff0c;注意取反的话&#xff0c;如何实现&#xff1f; 3、定时器动态扫描的思路&#xff1b; 4、注意动态扫描的时…

golang入门笔记——测试

测试类型&#xff1a; 单元测试&#xff1a; 规则&#xff1a; 1.所有测试文件以_test.go结尾 2.func Testxxx&#xff08;*testing.T&#xff09; 3.初始化逻辑放到TestMain中 运行&#xff1a; go test [flags][packages]Go语言中的测试依赖go test命令。 go test命令是一…

(考研湖科大教书匠计算机网络)第六章应用层-第四节:域名系统DNS

获取pdf&#xff1a;密码7281专栏目录首页&#xff1a;【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一&#xff1a;DNS概述二&#xff1a;层次域名结构&#xff08;1&#xff09;概述&#xff08;2&#xff09;顶级域名分类&#xff08;3&#xff09;因特网命名空…

「SAP」ABAP模块学习需要了解什么?快收下这份ABAP技术栈指南【附技能树】

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计专业大二本科在读&#xff0c;阿里云社区专家博主&#xff0c;华为云社区云享专家&#xff0c;CSDN SAP应用技术领域新兴创作者。   在学习工…

1. MacOs Dart环境安装

前置材料&#xff1a;需要安装dart的Mac设备, 一颗会用搜索引擎的聪明大脑一步步讲一下homebrew的安装流程我个人安装时遇到的情况 大家做个参考 如果你遇到的问题和我的不一样可以来这里 homebrew快速安装指引 可入群咨询首先, 我其实是安装过homebrew的网上常见的dart安装命令…

2003 -Cant connect to MySql server on IP地址 (10060)----在docker安装的MySQL连接阿里云服务器

MySQL配置 这个问题是因为在数据库服务器中的mysql数据库中的user的表中没有权限(也可以说没有用户)&#xff0c;下面将记录我遇到问题的过程及解决的方法。 在搭建完LNMP环境后用Navicate连接出错 遇到这个问题首先到mysql所在的服务器上用连接进行处理 0、docker exec -it m…

界面控件DevExpress WinForm——轻松构建类Visual Studio UI(二)

DevExpress WinForm拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForm能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜任…

嵌入式常用知识

12、并发和并行的区别&#xff1f; 最本质的区别就是&#xff1a;并发是轮流处理多个任务&#xff0c;并行是同时处理多个任务。 你吃饭吃到一半&#xff0c;电话来了&#xff0c;你一直到吃完了以后才去接&#xff0c;这就说明你不支持并发也不支持并行。 你吃饭吃到一半&…

推荐5款实用小工具,第五款更是小白最爱

作为一个黑科技软件爱好者&#xff0c;电脑里肯定是不会缺少这方面的东西&#xff0c;今天的5款实用小工具闪亮登场了。 1.磁盘空间分析——SpcaeSniffer SpcaeSniffer是一款可视化硬盘空间占用布局大小的查询工具&#xff0c;软件体积小巧&#xff0c;使用简单。软件可对所需…

Android Studio翻译插件推介(Translation)

前言 Android Studio翻译插件适合英语水平不太好的程序员&#xff08;比如&#xff1a;我&#xff09;&#xff0c;最常用的翻译插件Translation和AndroidLocalize&#xff0c;本文主要讲解Translation&#xff0c;亲测可用。 先看看效果&#xff1a;这里是Android的API,任意选…

apache、iis设置301教程(适用虚拟主机)

当前提供教程是通过重写规则实现301,目前西部数码主机面板已经开发"301转向"功能可快捷设置&#xff1a; 如果部署了https访问&#xff0c;请忽略此教程&#xff0c;部署https的网站请参考&#xff1a;https://www.west.cn/faq/list.asp?unid1419 进入业务管理-虚…

单通道说话人语音分离——Conv-TasNet(Convolutional Time-domain audio separation Network)

单通道说话人语音分离——Conv-TasNet模型(Convolutional Time-domain audio separation Network) 参考文献&#xff1a;《Conv-TasNet: Surpassing Ideal Time-FrequencyMagnitude Masking for Speech Separation》 1.背景 在真实的声学环境中&#xff0c;鲁棒的语音处理通常…

【蓝桥杯每日一题】差分算法

&#x1f34e; 博客主页&#xff1a;&#x1f319;披星戴月的贾维斯 &#x1f34e; 欢迎关注&#xff1a;&#x1f44d;点赞&#x1f343;收藏&#x1f525;留言 &#x1f347;系列专栏&#xff1a;&#x1f319; 蓝桥杯 &#x1f319;我与杀戮之中绽放&#xff0c;亦如黎明的花…

银河麒麟V10桌面版系统将用户开发Qt界面程序添加为开机自启动

银河麒麟V10桌面版系统将用户开发Qt界面程序添加为开机自启动 银河麒麟V10桌面版系统允许用户开发自己的qt界面程序并将其添加为开机自启动。这样&#xff0c;每次开机后&#xff0c;用户开发的qt界面程序会自动启动&#xff0c;无需手动打开。 要将用户开发的qt界面程序添加…

走进chatGPT新一代机器人

chatGPT这款新一代对话式人工智能便在全球范围狂揽1亿名用户&#xff0c;并成功从科技界破圈&#xff0c;成为街头巷尾的谈资。chatGPT能干什么&#xff1f;打开官网https://openai.com/blog/chatgpt/ &#xff0c;完了&#xff0c;芭比Q了试下其他家的接口讲笑话写代码写解决方…