安装parcel
yarn global add parcel
parcel —version
到对应目录下运行:parcel index.html

动态显示代码

1变2

  1. <span id="demo"></span>
  2. <script>
  3. let demo = document.querySelector("#demo");
  4. demo.innerHTML = 1;
  5. setTimeout(() => {
  6. demo.innerHTML = 2;
  7. }, 2000);
  8. </script>

自动递增

  1. let demo = document.querySelector("#demo");
  2. let n = 1;
  3. demo.innerHTML = n;
  4. setInterval(() => {
  5. n = n + 1;
  6. demo.innerHTML = n;
  7. }, 1000);

老手不用setInterval

  1. let demo = document.querySelector("#demo");
  2. let n = 1;
  3. demo.innerHTML = n;
  4. let step = () => {
  5. setTimeout(() => {
  6. n = n + 1;
  7. demo.innerHTML = n;
  8. if (n <= 10) {
  9. step();
  10. }
  11. }, 1000);
  12. };
  13. step();

输出字符串

  1. let demo = document.querySelector("#demo");
  2. let message = "我爱北京天安门,天安门上太阳升";
  3. let n = 0;
  4. demo.innerHTML = message.substring(0, n); // substring截取字符串, [0,n)区间
  5. let step = () => {
  6. setTimeout(() => {
  7. n = n + 1;
  8. demo.innerHTML = message.substring(0, n);
  9. if (n < message.length) {
  10. step();
  11. }
  12. }, 300);
  13. };
  14. step();

将换行变成html的换行

  1. let message = `大家好
  2. 我是一名前端小白
  3. 接下来
  4. 我要加入css
  5. div {
  6. color: red;
  7. }
  8. `;
  9. message = message.replace(/\n/g, "<br>"); // replace只会替换第一个,所以用正则表达式 /\n/g

image.png
但是这样会打出<符号,所以这条路行不通,换另一种思路

  1. let demo = document.querySelector("#demo");
  2. let message = `大家好
  3. 我是一名前端小白
  4. 接下来
  5. 我要加入css
  6. div {
  7. color: red;
  8. }
  9. `;
  10. let n = 0;
  11. let message2 = "";
  12. let step = () => {
  13. setTimeout(() => {
  14. if (message[n] === "\n") {
  15. message2 += "<br>";
  16. } else if (message[n] === " ") {
  17. message2 += "&nbsp;"; // HTML的空格
  18. } else {
  19. message2 += message[n];
  20. }
  21. demo.innerHTML = message2; // 直接打印message,而不是按字符打印
  22. if (n < message.length - 1) {
  23. n += 1;
  24. step();
  25. }
  26. }, 100);
  27. };
  28. step();

加入CSS

  1. let demo = document.querySelector("#demo");
  2. let style = document.querySelector("#style");
  3. let message = `/* 大家好
  4. * 我是一名前端新人
  5. * 接下来
  6. * 我要秀一下我学到的知识
  7. */
  8. div1 {
  9. border: 1px solid red;
  10. width: 400px;
  11. height: 400px;
  12. }
  13. `;
  14. let n = 0;
  15. let message2 = "";
  16. let step = () => {
  17. setTimeout(() => {
  18. if (message[n] === "\n") {
  19. message2 += "<br>";
  20. } else if (message[n] === " ") {
  21. message2 += "&nbsp;";
  22. } else {
  23. message2 += message[n];
  24. }
  25. demo.innerHTML = message2;
  26. style.innerHTML = message.substring(0, n); // 在style标签里加入样式
  27. if (n < message.length - 1) {
  28. n += 1;
  29. step();
  30. }
  31. }, 100);
  32. };
  33. step();

太极

box-shadow

  1. box-shadow: 0 0 3px rgba(0,0,0,.5); /* X轴偏移量、Y轴偏移量、模糊半径、扩散半径和颜色 */

生成背景渐变代码
https://cssgradient.io/

定位居中

  1. #bagua {
  2. position: absolute;
  3. left: 50%; /* 左边距距离容器左边距 为容器宽度50% */
  4. transform: translateX(-50%); /* 向左移动自身宽度的50% */
  5. }
  6. #bagua {
  7. position: relative;
  8. right: 0;
  9. left: 50%;
  10. top: 50%;
  11. transform: translate(-50%, -50%);
  12. }

transform-origin可以调整旋转的中心点

  1. transform-origin: 100% 50%;

旋转

  1. @keyframes rotation {
  2. 0% {transform: rotate(0);}
  3. 100% {transform: rotate(-360deg);} /* 负角度逆时针旋转 */
  4. }
  5. div1 {
  6. animation: rotation 2s linear infinite;
  7. }

一个bug
如果之前一个样式有用到transform,
添加动画时又用transform, 那么要当心覆盖掉了之前的transform

  1. #bagua {
  2. position: relative;
  3. left: 50%;
  4. top: 50%;
  5. transform: translate(-50%, -50%);
  6. }
  7. @keyframes rotation1 {
  8. 0% {
  9. /* 上一个样式里也有translate, 不添加则发生位移
  10. 且 translate要放在rotate前面,否则不生效
  11. */
  12. transform: translate(-50%, -50%) rotate(0);
  13. }
  14. 100% {
  15. transform: translate(-50%, -50%) rotate(-360deg);
  16. }
  17. }
  18. #bagua {
  19. animation: rotation1 2s linear infinite;
  20. }

JS设置滚动条

  1. window.scrollTo(0, 999999);

CSS设置自动换行

  1. #demo {
  2. word-break: break-all;
  3. }

媒体查询

  1. @media (max-width: 500px) { /* 屏幕宽度小于500px的样式 */
  2. #html {
  3. height: 50vh; /* 屏幕高度50% */
  4. }
  5. #bagua {
  6. height: 50vh;
  7. }
  8. }

parcel打包

  1. # 运行
  2. parcel serve src/index.html --no-cache
  3. # 打包
  4. parcel build src/index.html --public-url . --no-source-maps --no-cache --detailed-report
  5. # 可以直接
  6. parcel build src/index.html --public-url .

新建.gitignore文件,下面两个文件夹不上传到github
image.png
下面三个文件夹都是打包的产物,可以删掉重新打包
image.png

程序员三大难题:

  1. 要不要加1
  2. 怎么命名
  3. 缓存失效