0


200行Html5+CSS3+JS代码实现动态圣诞树

一、前言

  • 最近CSDN的热榜出现了很多用Python、C/C++等编程语言实现的圣诞树,发现很少用前端的,这篇文章用前端三大杀手Html5、CSS、Js来实现动态圣诞树。

二、圣诞树

效果展示:

备注:

  • 整体圣诞树分为3个部分,书的主干、粒子特效、树上的卡片
  • **树上的卡片(重点)**:每一张卡片上都有一个名字,代表圣诞树的叶子,后面可以根据自己需求更改,比如全部改成喜欢人的名字,在JS代码的第五行内更改内容
  • 树的动态旋转通过js实现、主干是html5、样式CSS

三、步骤

1.下载VSCode

下载链接:VSCode

  • 在Hbuilder、idea运行也是可以的,这里推荐使用VSCode

2.配置插件

**三个插件对应的功能: **

  • 改写标签后自动完善
  • 切换成中文页面
  • 让代码在网页中打开,默认键Alt+B

3.构建三个文件

  • 在桌面新建一个空的文件夹,用VSCode打开
  • 在VSCode新建三个文件 index .html domtree.css domtree.js (文件名字要和这个一样,不然会出错),保存别忘了
  • 对于文件的层级问题,三个index .html domtree.css domtree.js 在同一级文件夹内不要修改,如果在下一个层级或者上面一个层级需要改动选择
  • 在index.html代码界面,默认键Alt+B 或者 鼠标右击,选择倒数第三个Open In Default Browser默认浏览器打开

4.添加额外功能

修改背景:

  • Css代码的第39到43行,可以更改不同的背景颜色或者背景图片,鼠标放在红色的框上面会出现,上图所示的一个颜色选择,拉动就可以选择不同的颜色背景

添加音乐:

  • 在index.html代码中的第23行添加下列代码: <embed src="song.mp3" hidden="false" autostart="true" loop="true">
  • src="音乐地址",把想要播放的音乐,提前放到这个文件夹中,把这个音乐的命名填入src中就可以播放音乐
  • hidden="true"表示隐藏音乐播放按钮,hidden="false"开启音乐播放按钮
  • autostart="true" 打开网页加载完后自动播放
  • loop="true"循环播放 如仅想播放一次则为:loop="false"

修改卡片上的内容:

  • 圣诞树上面的卡片是由不同的类型的,有的卡片可以下拉查看下面的内容
  • 圣诞树上面的卡片是可以修改内容的,在JS代码的第五行的const greetings = [ ]修改,把里面的内容换成你想要的就行,如果叶子不够,在后面还可以加入。

四、编码实现

CSS代码:

  1. /*********************************************
  2. * RESET
  3. *********************************************/
  4. html{color:#000;background:#222222;}
  5. a{cursor:pointer;}
  6. html,body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}
  7. table{border-collapse:collapse;border-spacing:0;}
  8. fieldset,img{border:0;}
  9. address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}
  10. li{list-style:none;}
  11. caption,th{text-align:left;}
  12. /* h1,h2,h3,h4,h5,h6{font-size:100%;} */
  13. q:before,q:after{content:'';}
  14. abbr,acronym {border:0;font-variant:normal;}
  15. sup {vertical-align:text-top;}
  16. sub {vertical-align:text-bottom;}
  17. input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;outline-style:none;outline-width:0pt;}
  18. legend{color:#000;}
  19. a:focus,object,h1,h2,h3,h4,h5,h6{-moz-outline-style: none; border:0px;}
  20. /*input[type="Submit"]{cursor:pointer;}*/
  21. strong {font-weight: bold;}
  22. /*********************************************
  23. * GLOBAL
  24. *********************************************/
  25. body, html {
  26. overflow: hidden;
  27. font-family: Helvetica, Arial, sans-serif;
  28. color: #fff;
  29. font-size: 11px;
  30. width: 100%;
  31. height: 100%;
  32. background: #b72424;
  33. background: -moz-radial-gradient(center, ellipse cover, #b72424 0%, #492727 100%);
  34. background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%,#b72424), color-stop(100%,#492727));
  35. background: -webkit-radial-gradient(center, ellipse cover, #b72424 0%,#492727 100%);
  36. background: radial-gradient(center, ellipse cover, #b72424 0%,#492727 100%);
  37. }
  38. @keyframes spin {
  39. 0% { transform: rotateY( 0deg ); }
  40. 100% { transform: rotateY( 360deg ); }
  41. }
  42. body {
  43. perspective: 3000px;
  44. perspective-origin: 0 20%;
  45. }
  46. .tree {
  47. margin: 0 auto;
  48. position: relative;
  49. animation: spin 18s infinite linear;
  50. transform-origin: 50% 0;
  51. transform-style: preserve-3d;
  52. }
  53. .tree * {
  54. position: absolute;
  55. transform-origin: 0 0;
  56. }

**Html代码: **

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="description" content="A Christmas tree built out of form elements." />
  6. <meta name="author" content="Hakim El Hattab" />
  7. <meta http-equiv="X-UA-Compatible" content="chrome=1">
  8. <title>DOM Tree</title>
  9. <link href="domtree.css" rel="stylesheet" media="screen" />
  10. <link href='https://fonts.googleapis.com/css?family=Armata' rel='stylesheet' type='text/css'>
  11. </head>
  12. <body>
  13. <div class="tree"></div>
  14. <script src="domtree.js"></script>
  15. <!-- Third party scripts and sharing UI -->
  16. <p class="project-title">DOM Tree</p>
  17. <div class="credits">
  18. <a href="https://blog.csdn.net/qq_53673551?spm=1000.2115.3001.5343">知心宝贝</a>
  19. <a href="https://twitter.com/hakimel">文章代码参考@hakimel</a>
  20. </div>
  21. <style type="text/css" media="screen">
  22. .project-title {
  23. position: absolute;
  24. left: 25px;
  25. bottom: 20px;
  26. font-size: 16px;
  27. color: #fff;
  28. }
  29. .credits {
  30. position: absolute;
  31. right: 20px;
  32. bottom: 25px;
  33. font-size: 15px;
  34. z-index: 20;
  35. color: #fff;
  36. vertical-align: middle;
  37. }
  38. .credits * + * {
  39. margin-left: 15px;
  40. }
  41. .credits a {
  42. padding: 8px 10px;
  43. color: rgba(255,255,255,0.7);
  44. border: 2px solid rgba(255,255,255,0.7);
  45. text-decoration: none;
  46. }
  47. .credits a:hover {
  48. border-color: #fff;
  49. color: #fff;
  50. }
  51. @media screen and (max-width: 1040px) {
  52. .project-title {
  53. display: none;
  54. }
  55. .credits {
  56. width: 100%;
  57. left: 0;
  58. right: auto;
  59. bottom: 0;
  60. padding: 30px 0;
  61. background: #b72424;
  62. text-align: center;
  63. }
  64. .credits a {
  65. display: inline-block;
  66. margin-top: 7px;
  67. margin-bottom: 7px;
  68. }
  69. }
  70. </style>
  71. <script>
  72. var _gaq = [['_setAccount', 'UA-15240703-1'], ['_trackPageview']];
  73. (function(d, t) {
  74. var g = d.createElement(t),
  75. s = d.getElementsByTagName(t)[0];
  76. g.async = true;
  77. g.src = ('https:' == location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
  78. s.parentNode.insertBefore(g, s);
  79. })(document, 'script');
  80. </script>
  81. </body>
  82. </html>

**JS代码: **

  1. const width = 500;
  2. const height = 600;
  3. const quantity = 150;
  4. const types = [ 'text', 'select', 'progress', 'meter', 'button', 'radio', 'checkbox' ];
  5. const greetings = [ '知心宝贝','知心宝贝','Merry Christmas','Merry Christmas','Merry Christmas','Merry Christmas','知心宝贝','12月25','知心宝贝','Merry Christmas','Happy Holidays', ' 知心宝贝','12月25','知心宝贝','Merry Christmas','知心宝贝','Merry Christmas','知心宝贝' ];
  6. let tree = document.querySelector( '.tree' ),
  7. treeRotation = 0;
  8. tree.style.width = width + 'px';
  9. tree.style.height = height + 'px';
  10. window.addEventListener( 'resize', resize, false );
  11. // The tree
  12. for( var i = 0; i < quantity; i++ ) {
  13. let element = null,
  14. type = types[ Math.floor( Math.random() * types.length ) ],
  15. greeting = greetings[ Math.floor( Math.random() * greetings.length ) ];
  16. let x = width/2,
  17. y = Math.round( Math.random() * height );
  18. let rx = 0,
  19. ry = Math.random() * 360,
  20. rz = -Math.random() * 15;
  21. let elemenWidth = 5 + ( ( y / height ) * width / 2 ),
  22. elemenHeight = 26;
  23. switch( type ) {
  24. case 'button':
  25. element = document.createElement( 'button' );
  26. element.textContent = greeting;
  27. element.style.width = elemenWidth + 'px';
  28. element.style.height = elemenHeight + 'px';
  29. break;
  30. case 'progress':
  31. element = document.createElement( 'progress' );
  32. element.style.width = elemenWidth + 'px';
  33. element.style.height = elemenHeight + 'px';
  34. if( Math.random() > 0.5 ) {
  35. element.setAttribute( 'max', '100' );
  36. element.setAttribute( 'value', Math.round( Math.random() * 100 ) );
  37. }
  38. break;
  39. case 'select':
  40. element = document.createElement( 'select' );
  41. element.setAttribute( 'selected', greeting );
  42. element.innerHTML = '<option>' + greetings.join( '</option><option>' ) + '</option>';
  43. element.style.width = elemenWidth + 'px';
  44. element.style.height = elemenHeight + 'px';
  45. break;
  46. case 'meter':
  47. element = document.createElement( 'meter' );
  48. element.setAttribute( 'min', '0' );
  49. element.setAttribute( 'max', '100' );
  50. element.setAttribute( 'value', Math.round( Math.random() * 100 ) );
  51. element.style.width = elemenWidth + 'px';
  52. element.style.height = elemenHeight + 'px';
  53. break;
  54. case 'text':
  55. default:
  56. element = document.createElement( 'input' );
  57. element.setAttribute( 'type', 'text' );
  58. element.setAttribute( 'value', greeting );
  59. element.style.width = elemenWidth + 'px';
  60. element.style.height = elemenHeight + 'px';
  61. }
  62. element.style.transform = `translate3d(${x}px, ${y}px, 0px) rotateX(${rx}deg) rotateY(${ry}deg) rotateZ(${rz}deg)`;
  63. tree.appendChild( element );
  64. }
  65. // Let it snow
  66. for( var i = 0; i < 200; i++ ) {
  67. let element = document.createElement( 'input' );
  68. element.setAttribute( 'type', 'radio' );
  69. let spread = window.innerWidth/2;
  70. let x = Math.round( Math.random() * spread ) - ( spread / 4 ),
  71. y = Math.round( Math.random() * height ),
  72. z = Math.round( Math.random() * spread ) - ( spread / 2 );
  73. let rx = 0,
  74. ry = Math.random() * 360,
  75. rz = 0;
  76. if( Math.random() > 0.5 ) element.setAttribute( 'checked', '' );
  77. element.style.transform = `translate3d(${x}px, ${y}px, ${z}px) rotateX(${rx}deg) rotateY(${ry}deg) rotateZ(${rz}deg)`;
  78. tree.appendChild( element );
  79. }
  80. function resize() {
  81. tree.style.top = ( ( window.innerHeight - height - 100 ) / 2 ) + 'px';
  82. }
  83. resize();

附录:

零基础必看的Html5+Css3+移动端前端教程(一)

零基础必看的Html5+Css3+移动端前端教程(二)

零基础必看的Html5+Css3+移动端前端教程(三)

零基础必看的Html5+Css3+移动端前端教程(四)

零基础必看的Html5+Css3+移动端前端教程(五)

标签: 前端 javascript html5

本文转载自: https://blog.csdn.net/qq_53673551/article/details/122028026
版权归原作者 知心宝贝 所有, 如有侵权,请联系我们删除。

“200行Html5+CSS3+JS代码实现动态圣诞树”的评论:

还没有评论