整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

2022年秋季CS50 Lecture8 HTML,

2022年秋季CS50 Lecture8 HTML,CSS,JavaScript
  • elcome!
  • Routers
  • DNS
  • HTTP
  • HTML
  • CSS
  • Frameworks
  • JavaScript
  • Summing Up

Welcome!


  • 在前几周,我们向你介绍了 Python,这是一种高级编程语言,它利用了我们在 C 语言中学到的相同构建块。今天,我们将在HTML,CSS和JavaScript中进一步扩展这些构建块。
  • 互联网是我们所有人都使用的一项技术。
  • 利用我们前几周的技能,我们可以构建自己的网页和应用程序。
  • 阿帕网 将互联网上的每一个点相互连接起来。
  • 两点之间的点可以被视为路由器

Routers


  • 为了将数据从一个地方路由到另一个地方,我们需要做出路由决策。也就是说,有人需要对数据如何从 A 点传输到 B 点进行编程。
  • 你可以想象数据如何从 A 点和 B 点采用多条路径,这样当路由器拥塞时,数据可以通过另一条路径流动。
  • TCP/IP 是允许计算机通过互联网在它们之间传输数据的两种协议。
  • IP 或互联网协议是计算机可以通过互联网相互识别的一种方式。每台计算机在世界上都有一个唯一的地址。地址采用以下形式:
 #.#.#.#
  • 数字范围从0到 255。IP 地址为 32 位,这意味着这些地址可以容纳超过 40 亿个地址。较新版本的 IP 地址可以容纳更多的计算机!
  • 在现实世界中,服务器为我们做了很多工作。
  • TCP 或传输控制协议用于区分Web服务。例如,80用于表示 HTTP和443用于表示 HTTPS。这些数字是 端口号
  • 将信息从一个位置发送到另一个位置时,将发送 IP 地址和 TCP 端口号。
  • 这些协议还用于将大文件分段为称为数据包的多个部分。例如,一张猫的大照片可以分多个数据包发送。当数据包丢失时,TCP/IP 可以从源服务器再次请求丢失的数据包。
  • TCP将在发送和接收所有数据时进行确认。

DNS


  • 如果你需要记住访问网站的地址号码,那将非常乏味。
  • DNS域名系统 是互联网上的服务器集合,用于将网站地址(如 harvard.edu)路由到特定的 IP 地址。
  • DNS 只是保存一个表或数据库,该表或数据库将特定的完全限定域名链接到特定的 IP 地址。

HTTP


  • HTTP超文本传输 协议是开发人员用来构建强大而有用的东西的应用程序级协议。
  • 当你看到一个地址时,例如https://www.example.com你实际上是在隐式访问该地址,并在它的末尾使用 /。
  • 路径是斜杠之后存在的 路径。例如https://www.example.com/folder/file.html,访问example.com并浏览folder,然后访问名为file.html的文件。
  • https此地址中是用于连接到该 Web 地址的协议。通过协议,我们的意思是HTTP利用GET或POST请求 从服务器请求信息。例如,你可以启动谷歌浏览器,右键单击,然后单击inspect。当你打开 developer tools 并访问Network时,选择Preserve log,你将看到Request Headers。你将看到提及GET。这在其他浏览器中也是可能的,使用的方法略有不同。
  • 通常,在向服务器发出请求后,你将在Response Headers收到以下内容:
 HTTP/1.1 200 OK 
 Content-Type: text/html
  • 这种检查这些日志的方法可能比需要的要复杂一些。你可以在 code.cs50.io 分析HTTP协议的工作。例如,在终端窗口中键入以下内容:
 curl -I <https://www.harvard.edu>
  • 请注意,此命令的输出返回服务器响应的所有标头值。
  • 同样,在终端窗口中执行以下操作:
 curl -I <http://www.harvard.edu>
  • 请注意,s在https中已被删除。服务器响应将显示响应是301而不是100 ,表示网站已永久移动。
  • 此外,在终端窗口中执行以下命令:
 curl -I <https://harvard.edu>
  • 请注意,你将看到相同的301响应,向浏览器提供提示,说明在哪里可以找到正确的网站。
  • 与301类似,代码404表示尚未找到指定的 URL。还有许多其他响应代码,例如:
  200 OK
  301 Moved Permanently
  302 Found
  304 Not Modified
  304 Temporary Redirect
  401 Unauthorized
  403 Forbidden
  404 Not Found
  418 I'm a Teapot
  500 Internal Server Error
  503 Service Unavailable
  • 值得一提的是,500错误始终是你作为开发人员的错。这对于下周的 pset 尤其重要,也可能对你的最终项目也很重要!
  • 我们可以向服务器发送更复杂的命令。例如,我们可以尝试以下操作:
  GET /search?q=cats HTTP/1.1
  Host: www.google.com
  • 请注意,我们不仅使用?标记指定路径,还指定用户输入。 q用于表示 查询,cats传递给它。
  • 如果你手动在网络浏览器地址栏中输入google.com/search?=cats内容,它将手动向 Google 查询与cats有关的结果。

HTML


  • HTML超文本标记语言由标记组成,每个标记可能具有一些描述它的属性
  • 在终端中,键入code hello.html并编写代码,如下所示:
  <!DOCTYPE html>

  <!-- Demonstrates HTML -->

  <html lang="en">
      <head>
          <title>hello, title</title>
      </head>
      <body>
          hello, body
      </body>
  </html>
  • 请注意,html标记会打开和关闭此文件。此外,请注意lang属性,该属性修改了html标记的行为。另外,请注意,有head标签和body标签。缩进不是必需的,但确实建议层次结构。
  • 你可以通过键入http-server来提供代码。此服务现在可在很长的 URL 上使用。如果单击它,则可以使用自己的代码访问该网站。
  • 当你访问此 URL 时,请注意文件名hello.html出现在此 URL 的末尾。
  • 标签的层次结构可以表示如下:

  • 浏览器将从上到下和从左到右读取你的 HTML 文件。
  • 由于空格在 HTML 中被有效忽略,因此你需要使用<p>段落标签来打开和关闭段落。请考虑以下事项:
  <!DOCTYPE html>

  <!-- Demonstrates paragraphs -->

  <html lang="en">
      <head>
          <title>paragraphs</title>
      </head>
      <body>
          <p>
              Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus convallis scelerisque quam, vel hendrerit lectus viverra eu. Praesent posuere eget lectus ut faucibus. Etiam eu velit laoreet, gravida lorem in, viverra est. Cras ut purus neque. In porttitor non lorem id lobortis. Mauris gravida metus libero, quis maximus dui porta at. Donec lacinia felis consectetur venenatis scelerisque. Nulla eu nisl sollicitudin, varius velit sit amet, vehicula erat. Curabitur sollicitudin felis sit amet orci mattis, a tempus nulla pulvinar. Aliquam erat volutpat.
          </p>
          <p>
              Mauris ut dui in eros semper hendrerit. Morbi vel elit mi. Sed sit amet ex non quam dignissim dignissim et vel arcu. Pellentesque eget elementum orci. Morbi ac cursus ex. Pellentesque quis turpis blandit orci dapibus semper sed non nunc. Nulla et dolor nec lacus finibus volutpat. Sed non lorem diam. Donec feugiat interdum interdum. Vivamus et justo in enim blandit fermentum vel at elit. Phasellus eu ante vitae ligula varius aliquet. Etiam id posuere nibh.
          </p>
          <p>
              Aenean venenatis convallis ante a rhoncus. Nullam in metus vel diam vehicula tincidunt. Donec lacinia metus sem, sit amet egestas elit blandit sit amet. Nunc egestas sem quis nisl mattis semper. Pellentesque ut magna congue lorem eleifend sodales. Donec tortor tortor, aliquam vitae mollis sed, interdum ut lectus. Mauris non purus quis ipsum lacinia tincidunt.
          </p>
          <p>
              Integer at justo lacinia libero blandit aliquam ut ut dui. Quisque tincidunt facilisis venenatis. Nullam dictum odio quis lorem luctus, vel malesuada dolor luctus. Aenean placerat faucibus enim a facilisis. Maecenas eleifend quis massa sed eleifend. Ut ultricies, dui ac vulputate hendrerit, ex metus iaculis diam, vitae fermentum libero dui et ante. Phasellus suscipit, arcu ut consequat sagittis, massa urna accumsan massa, eu aliquet nulla lorem vitae arcu. Pellentesque rutrum felis et metus porta semper. Nam ac consectetur mauris.
          </p>
          <p>
              Suspendisse rutrum vestibulum odio, sed venenatis purus condimentum sed. Morbi ornare tincidunt augue eu auctor. Vivamus sagittis ac lectus at aliquet. Nulla urna mauris, interdum non nibh in, vehicula porta enim. Donec et posuere sapien. Pellentesque ultrices scelerisque ipsum, vel fermentum nibh tincidunt et. Proin gravida porta ipsum nec scelerisque. Vestibulum fringilla erat at turpis laoreet, nec hendrerit nisi scelerisque.
          </p>
          <p>
              Sed quis malesuada mi. Nam id purus quis augue sagittis pharetra. Nulla facilisi. Maecenas vel fringilla ante. Cras tristique, arcu sit amet blandit auctor, urna elit ultricies lacus, a malesuada eros dui id massa. Aliquam sem odio, pretium vel cursus eget, scelerisque at urna. Vestibulum posuere a turpis consectetur consectetur. Cras consequat, risus quis tempor egestas, nulla ipsum ornare erat, nec accumsan nibh lorem nec risus. Integer at iaculis lacus. Integer congue nunc massa, quis molestie felis pellentesque vestibulum. Nulla odio tortor, aliquam nec quam in, ornare aliquet sapien.
          </p>
      </body>
  </html> 
  • 请注意,段落以<p>标签开头,以</p>标签结尾。
  • HTML 允许表示标题:
   <!DOCTYPE html>

  <!-- Demonstrates headings (for chapters, sections, subsections, etc.) -->

  <html lang="en">

      <head>
          <title>headings</title>
      </head>

      <body>

          <h1>One</h1>
          <p>
              Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus convallis scelerisque quam, vel hendrerit lectus viverra eu. Praesent posuere eget lectus ut faucibus. Etiam eu velit laoreet, gravida lorem in, viverra est. Cras ut purus neque. In porttitor non lorem id lobortis. Mauris gravida metus libero, quis maximus dui porta at. Donec lacinia felis consectetur venenatis scelerisque. Nulla eu nisl sollicitudin, varius velit sit amet, vehicula erat. Curabitur sollicitudin felis sit amet orci mattis, a tempus nulla pulvinar. Aliquam erat volutpat.
          </p>

          <h2>Two</h2>
          <p>
              Mauris ut dui in eros semper hendrerit. Morbi vel elit mi. Sed sit amet ex non quam dignissim dignissim et vel arcu. Pellentesque eget elementum orci. Morbi ac cursus ex. Pellentesque quis turpis blandit orci dapibus semper sed non nunc. Nulla et dolor nec lacus finibus volutpat. Sed non lorem diam. Donec feugiat interdum interdum. Vivamus et justo in enim blandit fermentum vel at elit. Phasellus eu ante vitae ligula varius aliquet. Etiam id posuere nibh.
          </p>

          <h3>Three</h3>
          <p>
              Aenean venenatis convallis ante a rhoncus. Nullam in metus vel diam vehicula tincidunt. Donec lacinia metus sem, sit amet egestas elit blandit sit amet. Nunc egestas sem quis nisl mattis semper. Pellentesque ut magna congue lorem eleifend sodales. Donec tortor tortor, aliquam vitae mollis sed, interdum ut lectus. Mauris non purus quis ipsum lacinia tincidunt.
          </p>

          <h4>Four</h4>
          <p>
              Integer at justo lacinia libero blandit aliquam ut ut dui. Quisque tincidunt facilisis venenatis. Nullam dictum odio quis lorem luctus, vel malesuada dolor luctus. Aenean placerat faucibus enim a facilisis. Maecenas eleifend quis massa sed eleifend. Ut ultricies, dui ac vulputate hendrerit, ex metus iaculis diam, vitae fermentum libero dui et ante. Phasellus suscipit, arcu ut consequat sagittis, massa urna accumsan massa, eu aliquet nulla lorem vitae arcu. Pellentesque rutrum felis et metus porta semper. Nam ac consectetur mauris.
          </p>

          <h5>Five</h5>
          <p>
              Suspendisse rutrum vestibulum odio, sed venenatis purus condimentum sed. Morbi ornare tincidunt augue eu auctor. Vivamus sagittis ac lectus at aliquet. Nulla urna mauris, interdum non nibh in, vehicula porta enim. Donec et posuere sapien. Pellentesque ultrices scelerisque ipsum, vel fermentum nibh tincidunt et. Proin gravida porta ipsum nec scelerisque. Vestibulum fringilla erat at turpis laoreet, nec hendrerit nisi scelerisque.
          </p>

          <h6>Six</h6>
          <p>
              Sed quis malesuada mi. Nam id purus quis augue sagittis pharetra. Nulla facilisi. Maecenas vel fringilla ante. Cras tristique, arcu sit amet blandit auctor, urna elit ultricies lacus, a malesuada eros dui id massa. Aliquam sem odio, pretium vel cursus eget, scelerisque at urna. Vestibulum posuere a turpis consectetur consectetur. Cras consequat, risus quis tempor egestas, nulla ipsum ornare erat, nec accumsan nibh lorem nec risus. Integer at iaculis lacus. Integer congue nunc massa, quis molestie felis pellentesque vestibulum. Nulla odio tortor, aliquam nec quam in, ornare aliquet sapien.
          </p>

      </body>

  </html>
  • 请注意,<h1>、<h2> 和<h3> 表示不同级别的标题。
  • 我们还可以在 HTML 中创建列表:
   <!DOCTYPE html>

  <!-- Demonstrates (ordered) lists -->

  <html lang="en">
      <head>
          <title>list</title>
      </head>
      <body>
          <ol>
              <li>foo</li>
              <li>bar</li>
              <li>baz</li>
          </ol>
      </body>
  </html>
  • 请注意,<ol>标记会创建一个包含三个项目的有序列表。
  • 我们还可以在 HTML 中创建一个表:
  <!DOCTYPE html>

  <!-- Demonstrates table -->

  <html lang="en">
      <head>
          <title>table</title>
      </head>
      <body>
          <table>
              <tr>
                  <td>1</td>
                  <td>2</td>
                  <td>3</td>
              </tr>
              <tr>
                  <td>4</td>
                  <td>5</td>
                  <td>6</td>
              </tr>
              <tr>
                  <td>7</td>
                  <td>8</td>
                  <td>9</td>
              </tr>
              <tr>
                  <td>*</td>
                  <td>0</td>
                  <td>#</td>
              </tr>
          </table>
      </body>
  </html>
  • 表还具有用于打开和关闭其中每个元素的标记。
  • 图像也可以在HTML中使用:
  <!DOCTYPE html>

  <!-- Demonstrates image -->

  <html lang="en">
      <head>
          <title>image</title>
      </head>
      <body>
          <!-- https://www.harvard.edu/ -->
          <img alt="Harvard University" src="harvard.jpg">
      </body>
  </html>
  • 请注意,src="harvard.jpg"指示图像文件所在的路径。
  • 视频也可以包含在HTML中:
  <!DOCTYPE html>

  <!-- Demonstrates video -->

  <html lang="en">
      <head>
          <title>video</title>
      </head>
      <body>
          <!-- https://www.harvard.edu/ -->
          <video autoplay loop muted playsinline width="1280">
              <source src="halloween.mp4" type="video/mp4">
          </video>
      </body>
  </html>
  • 请注意,width 属性定义视频的宽度。
  • 你还可以在各种网页之间链接:
  <!DOCTYPE html>

  <!-- Demonstrates link -->

  <html lang="en">
      <head>
          <title>link</title>
      </head>
      <body>
         Visit <a href="image.html">Harvard</a>.
      </body>
  </html>
  • 请注意,<a>或 标记用于使Harvard称为可链接的文本。
  • 元标记用于保存有关 HTML 文件中数据的信息。请考虑以下事项:
  <!DOCTYPE html>

  <!-- Demonstrates responsive design -->

  <html lang="en">
      <head>
          <meta name="viewport" content="initial-scale=1, width=device-width">
          <title>meta</title>
      </head>
      <body>
          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus convallis scelerisque quam, vel hendrerit lectus viverra eu. Praesent posuere eget lectus ut faucibus. Etiam eu velit laoreet, gravida lorem in, viverra est. Cras ut purus neque. In porttitor non lorem id lobortis. Mauris gravida metus libero, quis maximus dui porta at. Donec lacinia felis consectetur venenatis scelerisque. Nulla eu nisl sollicitudin, varius velit sit amet, vehicula erat. Curabitur sollicitudin felis sit amet orci mattis, a tempus nulla pulvinar. Aliquam erat volutpat.
      </body>
  </html>
  • 请注意,这组meta属性使此页面适合移动设备。
  • 你可以使用许多meta键值对:
  <!DOCTYPE html>

  <!-- Demonstrates Open Graph tags -->

  <html lang="en">
      <head>
          <meta property="og:title" content="CS50">
          <meta property="og:description" content="Introduction to the intellectual enterprises of computer science and the art of programming.">
          <meta property="og:image" content="cat.jpg">
          <title>meta</title>
      </head>
      <body>
          ...
      </body>
  </html> 
  • 请注意,这些键值对与网页的title 和description 相关。
  • 你还可以创建让人联想到 Google 搜索的表单:
  <!DOCTYPE html>

  <!-- Demonstrates form -->

  <html lang="en">
      <head>
          <title>search</title>
      </head>
      <body>
          <form action="https://www.google.com/search" method="get">
              <input name="q" type="search">
              <input type="submit" value="Google Search">
          </form>
      </body>
  </html>
  • 请注意,form标记会打开并提供它将采用action的属性。包含input字段,并将名称q和类型作为search传递。
  • 我们可以使此搜索更好,如下所示:
   <!DOCTYPE html>

  <!-- Demonstrates additional form attributes -->

  <html lang="en">
      <head>
          <title>search</title>
      </head>
      <body>
          <form action="https://www.google.com/search" method="get">
              <input autocomplete="off" autofocus name="q" placeholder="Query" type="search">
              <button>Google Search</button>
          </form>
      </body>
  </html>
  • 请注意,autocomplete已转到off。 autofocus已启用。
  • 我们只看到了你可以添加到站点的许多 HTML 元素中的一小部分。如果你有我们尚未看到的要添加到你的网站的想法(按钮,音频文件等),请尝试在谷歌上搜索“HTML 中的X”以找到正确的语法!

CSS


  • CSS,或 级联样式表,是一种标记语言,允许你微调 HTML 文件的美感。
  • 在终端中,键入code home.html并编写代码,如下所示:
   <!DOCTYPE html>

  <!-- Demonstrates inline CSS with P tags -->

  <html lang="en">
      <head>
          <title>css</title>
      </head>
      <body>
          <p style="font-size: large; text-align: center;">
              John Harvard
          </p>
          <p style="font-size: medium; text-align: center;">
              Welcome to my home page!
          </p>
          <p style="font-size: small; text-align: center;">
              Copyright ? John Harvard
          </p>
      </body>
  </html>
  • 请注意,为标记提供了一些style属性<p>。font-size设置为large 、medium 或。small 。然后text-align设置为居中。
  • 虽然正确,但上述内容设计得并不好。我们可以通过修改代码来消除冗余,如下所示:
   <!DOCTYPE html>

  <!-- Removes outer DIV -->

  <html lang="en">
      <head>
          <title>css</title>
      </head>
      <body style="text-align: center">
          <div style="font-size: large">
              John Harvard
          </div>
          <div style="font-size: medium">
              Welcome to my home page!
          </div>
          <div style="font-size: small">
              Copyright ? John Harvard
          </div>
      </body>
  </html>
  • 请注意,<div>标记用于将此 HTML 文件划分为特定区域。 text-align: center在 HTML 文件的整个正文上调用。
  • 事实证明,HTML 中包含更新的语义文本。我们可以按如下方式修改我们的代码:
  <!DOCTYPE html>

  <!-- Uses semantic tags instead of DIVs -->

  <html lang="en">
      <head>
          <title>css</title>
      </head>
      <body style="text-align: center">
          <header style="font-size: large">
              John Harvard
          </header>
          <main style="font-size: medium">
              Welcome to my home page!
          </main>
          <footer style="font-size: small">
              Copyright ? John Harvard
          </footer>
      </body>
  </html>
  • 请注意,header和footer分配了不同的样式。
  • 这种将样式和信息全部放在同一位置的做法不是好的做法。我们可以将样式元素移动到文件的顶部,如下所示:
  <!-- Demonstrates class selectors -->

  <html lang="en">
      <head>
          <style>

              .centered
              {
                  text-align: center;
              }

              .large
              {
                  font-size: large;
              }

              .medium
              {
                  font-size: medium;
              }

              .small
              {
                  font-size: small;
              }

          </style>
          <title>css</title>
      </head>
      <body class="centered">
          <header class="large">
              John Harvard
          </header>
          <main class="medium">
              Welcome to my home page!
          </main>
          <footer class="small">
              Copyright ? John Harvard
          </footer>
      </body>
  </html>
  • 请注意,所有样式标记都放置在style标记包装器head中。另请注意,我们已经为元素分配了类,称为large、medium、small和centered,并且我们通过在名称前放置一个点来选择这些 ,如.centered。
  • 事实证明,我们可以将所有样式代码移动到称为CSS文件的特殊文件中。我们可以创建一个名为style.css并将我们的类粘贴到其中的文件:
  .centered
  {
      text-align: center;
  }

  .large
  {
      font-size: large;
  }

  .medium
  {
      font-size: medium;
  }

  .small
  {
      font-size: small;
  }
  • 请注意,这是出现在我们的 HTML 文件中的逐字记录。
  • 然后我们可以告诉浏览器在哪里可以找到这个 HTML 文件的 CSS:
  <!DOCTYPE html>

  <!-- Demonstrates external stylesheets -->

  <html lang="en">
      <head>
          <link href="style.css" rel="stylesheet">
          <title>css</title>
      </head>
      <body class="centered">
          <header class="large">
              John Harvard
          </header>
          <main class="medium">
              Welcome to my home page!
          </main>
          <footer class="small">
              Copyright ? John Harvard
          </footer>
      </body>
  </html>
  • 请注意,style.css作为样式表链接到此 HTML 文件,告诉浏览器在哪里可以找到我们创建的样式。

Frameworks


  • 与我们可以在 Python 中利用的第三方库类似,有一些称为框架的第三方库,我们可以将其用于我们的 HTML 文件。
  • Bootstrap 是我们可以用来美化 HTML 和轻松完善设计元素的框架之一,从而使我们的页面更具可读性。
  • 可以通过在 html 文件head中添加link标签来引导程序:
   <head>
      <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">
      <title>favorites</title>
  </head>
  • 你可以在引导文档中了解有关此内容的更多信息。

JavaScript


  • JavaScript是另一种允许网页内交互的编程语言。
  • JavaScript 支持条件:
   if (x < y)
  {

  }
  else
  {

  }
  • 还支持变量:
 let counter=0;
  • 你还可以递增:
 counter++
  • 循环与你之前在 C 中看到的非常相似:
  for (let i=0; i < 3; i++)
  {

  }
  • JavaScript 允许你动态读取和修改加载到内存中的 html 文档,以便用户无需重新加载即可看到更改。
  • 请考虑以下 HTML:
  <!DOCTYPE html>

  <!-- Demonstrates programmatic changes to style -->

  <html lang="en">
      <head>
          <title>background</title>
      </head>
      <body>
          <button id="red">R</button>
          <button id="green">G</button>
          <button id="blue">B</button>
          <script>

              let body=document.querySelector('body');
              document.querySelector('#red').addEventListener('click', function() {
                  body.style.backgroundColor='red';
              });
              document.querySelector('#green').addEventListener('click', function() {
                  body.style.backgroundColor='green';
              });
              document.querySelector('#blue').addEventListener('click', function() {
                  body.style.backgroundColor='blue';
              });

          </script>
      </body>
  </html>
  • 请注意,JavaScript 侦听单击特定按钮的时间。单击此类后,页面上的某些样式属性将更改。 body定义为页面的正文。然后,事件侦听器等待单击其中一个按钮。然后,body.style.backgroundColor更改了。
  • 同样,请考虑以下事项:
  <!DOCTYPE html>

  <html lang="en">
      <head>
          <script>

              // Toggles visibility of greeting
              function blink()
              {
                  let body=document.querySelector('body');
                  if (body.style.visibility=='hidden')
                  {
                      body.style.visibility='visible';
                  }
                  else
                  {
                      body.style.visibility='hidden';
                  }
              }

              // Blink every 500ms
              window.setInterval(blink, 500);

          </script>
          <title>blink</title>
      </head>
      <body>
          hello, world
      </body>
  </html>
  • 本示例按设定的间隔闪烁文本。请注意,window.setInterval包含两个参数:1) 要调用的函数和 2) 函数调用之间的等待期(以毫秒为单位)。
  • 请考虑以下事项:
  <!DOCTYPE html>

  <html lang="en">

      <head>
          <title>autocomplete</title>
      </head>

      <body>

          <input autocomplete="off" autofocus placeholder="Query" type="text">

          <ul></ul>

          <script src="large.js"></script>
          <script>

              let input=document.querySelector('input');
              input.addEventListener('keyup', function(event) {
                  let html='';
                  if (input.value) {
                      for (word of WORDS) {
                          if (word.startsWith(input.value)) {
                              html +=`<li>${word}</li>`;
                          }
                      }
                  }
                  document.querySelector('ul').innerHTML=html;
              });

          </script>

      </body>
  </html>
  • 这是自动完成的 JavaScript 实现。
  • 有趣的是,我们还可以使用JavaScript进行地理定位:
   <!DOCTYPE html>

  <html lang="en">
      <head>
          <title>geolocation</title>
      </head>
      <body>
          <script>

              navigator.geolocation.getCurrentPosition(function(position) {
                  document.write(position.coords.latitude + ", " + position.coords.longitude);
              });

          </script>
      </body>
  </html>
  • 请注意,navigator.geolocation用于getCurrentPosition。如果你的计算机或浏览器不允许位置跟踪,这将不起作用。
  • JavaScript 的功能很多,可以在 JavaScript 文档中找到。

Summing Up


在本课中,你学习了如何创建自己的 HTML 文件、设置它们的样式、利用第三方框架以及使用 JavaScript。具体来说,我们讨论了...

  • TCP/IP
  • 域名解析
  • .HTML
  • .CSS
  • 框架
  • JavaScript

下次见!


原文出处:https://cs50.harvard.edu/college/2022/fall/notes/8/

否用CSS编写一个模拟打字输出“对”的过程?

有同学留言,让我用CSS实现这个效果。大家看看,是不是很有趣?七夕快到了,我想了想,写了一个demo。首先看一下效果,屏幕上会出现打字的动画,好像想了一下又删掉了“我爱你”,只留下了“对不起”,有点内涵。再看一次,打字的动画并不难。但如果只用CSS来实现,就有一定难度了。我们只看一下只用CSS实现这个效果的代码。这个效果除了打字,还需要文字的回删和光标的闪烁。只用CSS来做其实是有点难度的,代码不多,但需要扎实的基本功和思路。

先看一下现在的布局,这几个字出现了。这里用了一个叫做monospace的字体。

为什么要用这个字体呢?因为这套字体是等宽字体,每个字母和数字的宽度相等。每个汉字的宽度是字母的两倍。这样计算会更方便。由于我将body转换为弹性容器,所以r1的大小已经接近于里面文字的大小了。我们可以看到,r1占满了整个行,如果没有转换为弹性容器,它会占一行。

我们需要将其位置设置为原来的位置。现在需要用到伪元素了。先设置一下伪元素的背景颜色。由于伪元素是绝对定位,四个方向的偏移量为0,所以应该会占满整个h1。这样就覆盖住了所有的文字,然后做一个动画,让伪元素的左位移量值发生变化,这样文字就一个一个出现了。

我们来写一个动画。动画很简单,让最终状态的左位移量值为100%即可。动画开始时,左位移量值是从0开始的,和这里的初始值一样,因此可以省略from,直接写to。动画需要3秒钟完成,文字就可以显示出来了。现在的效果是很平滑的。我希望文字像打字一样一个一个出现,所以让它按七个字符的步骤出现,然后停在最后一个状态。

现在文字就这样一个一个地跳出来了。

·我们把红色的背景换成黑色,同时删除了前面的黑色边框。现在看起来有点像打字的效果,但正常打字还应该有光标。这里我们用after伪元素来实现,宽度设为2个像素即可。背景颜色设为黑色,出现了黑色的光标,但它应该随着文字移动。同样地,将前面的动画与之绑定。现在光标随着文字出现了,但应该有闪烁的效果。因此,我们需要编写一个动画,使光标闪烁,并在开始和结束时保持透明,并在中间过渡到白色。将动画的播放时间设置为500毫秒,并循环播放。现在,打字的效果就出来了。不过,先让光标出现,再让文字出现可能更真实。因此,我们将前两个动画的播放时间延迟了500毫秒。

好了!现在打字的效果基本完成了。但是,难点是如何在打完这句话后删除“我爱你”这几个字。

这并不难,但需要一些技巧。我们需要编写另一个动画来控制这两个伪元素的左移值,起始位置应为100%,即最右端。关键是to应该是多少,应该删除到do号处,也就是后面这段文字全部删除的位置,即对不起前面三个字的宽度。

to的值应该是多少?我们介绍一个很少使用的单位ch,一个ch等于一个字母,在使用等宽字体的情况下,它等于一个字母的宽度。两个ch正好等于一个汉字的宽度,也就是两个ch。左移值刚才已经分析过了,是对不起三个字的宽度,也就是6ch。将其绑定在伪元素上,让它在两秒钟内完成,并发布执行。

总共要删除四个字符,因此需要分四步执行,并在前面的动画完成后再执行,因此需要将动画的延迟时间设置为4.5秒,以保持动画的最终状态。两个伪元素都需要绑定这个动画,现在看一下最终的效果。没问题,已经删除了。

视频就到这里,感谢观看。

次看电影, 看到屏幕上一个个的文字蹦出来, 感觉像是有人在打字一样, 觉得挺有意思, 于是这里也用js实现了一个。


效果预览


最简单的打字效果

只要五行代码, 这里直接贴出来:

const dom=document.querySelector('.content')
const data='最简单的打字效果代码'.split('')
 let index=0
 function writing(index) {
 if (index < data.length) {
 dom.innerHTML +=data[index]
 setTimeout(writing.bind(this), 200, ++index)
 }
 }


是不是超级简单, 现在只要执行这个函数, 你就能看到这样的效果了:

实现原理:

通过setTimeout设置一个时间的间隔, 每隔一定时间向dom中插入对应的数据, 并将index加1, 然后重新调用这个写函数。

我自己是一名从事了多年开发的web前端老程序员,目前辞职在做自己的web前端私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的web前端学习干货,各种框架都有整理,送给每一位前端小伙伴,想要获取的可以关注我的头条号并在后台私信我:前端,即可免费获取。

在字的后面加上模拟的闪烁光标

思路:

通过一个伪类after将光标定在dom的最后面, 并给一个显示隐藏的循环动画模拟光标的闪烁

通过css3的animation我们就实现了一个闪烁的光标效果。

实现:

我们可以把上面的代码放在一个class中, 然后我们执行writing时将这个class加到对应的dom中即可。

实现输入汉字加拼音

这里依赖一个插件pinyin, 大家可以通过npm安装

npm install pinyin

使用也很简单,我们只要把文本传入这个插件的方法中, 返回的就是每个汉字的拼音的数组。

import Pinyin from 'pinyin'
let data='汉字'
let pinyinData=Pinyin(data) //['han', 'zi']

然后我们通过模板字符串注入到对应的文字后面即可:


this.content.innerHTML +=`${arr[index]}<sup>(${pinyinData[index]})</sup>`

这样就实现了加拼音的简单效果了。

加动画

加动画的代码也很简单, 关键是思路。

我开始的想法是将每个文字用span标签包裹起来, 给每个span加动画即可。后来发现这样行不通, 因为每次dom中的innerHTML其实是重新渲染的, 那样的话, 之前的span也会一直有动画, 这不是我们想要的效果。

解决方案:

给每个span加个class实现动画, 但在下个span渲染时清除之前span的class, 这样就实现了只有当前的span有动画了.

我这里直接选择了正则匹配粗暴的将class去掉。大家也可以寻找一种更好的方式解决。

代码如下:

this.content.innerHTML=this.content.innerHTML.replace(/span-animation/g, '') + `<span class="span-animation">${arr[index]}</span>`

实现效果:


源自:https://juejin.im/post/5ddf55835188257313541581