C±ÒÇ®°ü¹Ù·½ÍøÕ¾

ÍøÕ¾´úÂ뾫Ñ¡£º»ù´¡ÍøÕ¾´úÂëºÏ¼¯

ÍøÕ¾´úÂ뾫Ñ¡£º»ù´¡ÍøÕ¾´úÂëºÏ¼¯

ÍøÕ¾´úÂë³£ÓÉÒ³Ãæ½á¹¹¡¢½»»¥Âß¼­ºÍÊý¾Ý½Ó¿Ú×éºÏ¶ø³É¡£ÏÂÃæ¾«Ñ¡12Àà³£Ó÷¶Àý£¬Ç°8Àà²à³ÁÍøÒ³×é¼þ£¬ºó4Ààչʾǰºó¶Ë½»»¥£¬ÊʺÏ×é×°³ÉÆóҵչʾ¡¢ÉÌÆ·Ä¿Â¼»òÄÚÈÝÖÎÀíÀàÍøÕ¾¡£´úÂëÒÔÔ­Éú HTML¡¢CSS ºÍ JavaScript ±í°×£¬½Ó¿ÚµØÖ·Ê¹ÓÃÕ¾µãÄÚµÄʾÀýõè¾¶¡£

Ò»¡¢ÍøÒ³×é¼þÄ£°å

  1. ÏìӦʽµ¼º½À¸

    µ¼º½À¸ÊʺϸéÖÃÆ·ÅÆÃû³ÆºÍÀ¸Ä¿Èë¿Ú£»Õ­ÆÁʱ¿É½«ºáÏò²Ëµ¥¸ÄΪ×ÝÏò·ÖÁС£

    <header class="site-head">
      <strong>ÇàºÌ¹¤×÷ÊÒ</strong>
      <nav aria-label="Ö÷µ¼º½">
        <ul><li>Ê×Ò³</li><li>·þÎñ</li><li>ÁªÏµ</li></ul>
      </nav>
    </header>
    <style>
    .site-head{display:flex;justify-content:space-between;align-items:center}
    .site-head ul{display:flex;gap:20px;list-style:none}
    @media(max-width:600px){.site-head{align-items:flex-start;flex-direction:column}}
    </style>
  2. Ê×Ò³½¹µãÇø

    ÓÃÒ»¾äÖ÷±êÌâ¡¢Ò»¶Î½éÉܺÍÒ»¸öÐж¯°´Å¥Í¹ÆðÖ÷Ìâ·þÎñ£¬²¼¾°ÓëÎÄ×Öά³Ö×ã¹»¶Ô±È¡£

    <section class="hero">
      <p>Èô´Òâ¼±¾çÉÏÏß</p>
      <h1>ΪÓ×ÍŶӴòÔìÇ峺µÄÆ·ÅÆÍøÕ¾</h1>
      <button type="button">²é¿´·þÎñ</button>
    </section>
    <style>.hero{padding:64px 8%;background:#eef5ff;color:#18345b}
    .hero h1{max-width:680px;font-size:clamp(2rem,5vw,4rem)}</style>
  3. ¿¨Æ¬Áбí

    ·þÎñ¡¢ÎÄÕ»òÉÌÆ·¶¼¿Éѡȡ¿¨Æ¬³öÏÖ£»Íø¸ñÁÐÊýËæÈÝÆ÷¿í¶È×Ô¶¯±ä¶¯£¬Ô¤·ÀÕ­ÆÁºáÏòÒç³ö¡£

    <section class="cards">
      <article><h2>Æ·ÅÆÉè¼Æ</h2><p>³ÉÁ¢Í³Ò»µÄÊÓ¾õ±í°×¡£</p></article>
      <article><h2>ÍøÕ¾Ôì×÷</h2><p>Õû¶Ù½á¹¹²¢ÊÊÅä¶àÖÔìÁÄ»¡£</p></article>
    </section>
    <style>.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px}
    .cards article{padding:20px;border:1px solid #ddd;border-radius:12px}</style>
  4. Ñ¡ÏÇл»

    Ñ¡ÏÊʺϰѼò½é¡¢¹æ¸ñºÍÆÀ¼Û·ÅÔÚÍ³Ò»ÇøÓò¡£µã»÷°´Å¥ºóͬ²½¸ü줻î״̬ÓëÏÔÊ¾Ãæ°å¡£

    <button data-tab="intro">¼ò½é</button>
    <button data-tab="spec">¹æ¸ñ</button>
    <section id="intro">²úÆ·½éÉÜ</section>
    <section id="spec" hidden>³ß´çÓë²ÄÖÊ</section>
    <script>
    document.querySelectorAll("[data-tab]").forEach(btn=>btn.onclick=()=>{
      document.querySelectorAll("[data-tab]").forEach(x=>x.setAttribute("aria-selected",x===btn));
      document.querySelectorAll("#intro,#spec").forEach(x=>x.hidden=x.id!==btn.dataset.tab);
    });
    </script>
  5. ÕÛµþÎÊ´ðÇø

    ³£¼ûÎÊÌâ¿ÉÓÃÔ­ÉúÕÛµþÔªËØÊÕÄÉ£¬¶ÁÕß·¢Õ¹µ¥Ìõ´ð°¸Ê±£¬²»»á±»Èß³¤×¢Ã÷´ò¶Ïä¯ÀÀ¡£

    <details>
      <summary>Ìá½»ºó¶à¾Ã»áÊÕµ½»Ø¸´£¿</summary>
      <p>¹¤×÷ÈÕÌá½»µÄÕ÷ѯͨ³£°´Ìá½»°¤´Î´¦Öá£</p>
    </details>
  6. µ¯´°ÌáÐÑ¿ò

    È·ÈϲÙ×÷»òչʾ¶ÌÐÂÎÅʱÄܹ»Ê¹ÓöԻ°¿ò£»¹Ø¹Ø°´Å¥Ã÷È·¿É¼û£¬Ò²¿Éͨ¹ý¼üÅ̹عØ¡£

    <dialog id="notice">
      <p>×ÊÁÏÒѱ£Áô¡£</p>
      <button onclick="notice.close()">֪·ÁË</button>
    </dialog>
    <button onclick="notice.showModal()">²é¿´ÌáÐÑ</button>
  7. ¼´Ê±¹Ø¼ü´Êɸѡ

    Ó×ÐÍĿ¼¿ÉÏÈÔÚä¯ÀÀÆ÷¶Ë¹ýÂËÒÑÓÐÌõ¿î£»Ã¿ÌõÊý¾Ýͨ¹ýͳһµÄ data-name ×Ö¶ÎÆ¥Åä¡£

    <input id="filter" placeholder="ÊäÈëÃû³ÆÉ¸Ñ¡">
    <ul><li data-name="Éè¼Æ·þÎñ">Éè¼Æ·þÎñ</li>
    <li data-name="ÍøÕ¾Ôì×÷">ÍøÕ¾Ôì×÷</li></ul>
    <script>
    filter.oninput=()=>document.querySelectorAll("[data-name]").forEach(item=>{
      item.hidden=!item.dataset.name.includes(filter.value.trim());
    });
    </script>
  8. ±íµ¥±ØÌîУÑé

    ä¯ÀÀÆ÷Ô­ÉúУÑéÄÜÀ¹½Ø¿ÕÖµºÍÌåʽÃýÎó£»Ìá½»³É¹¦ºóÔÙÓɾ籾½ÓÈëÏÖʵ±£ÁôÂß¼­¡£

    <form id="contact">
      <label>ÓÊÏä<input type="email" name="email" required></label>
      <label>ÁôÑÔ<textarea name="message" required minlength="10"></textarea></label>
      <button>Ìá½»</button>
    </form>
    <script>
    contact.onsubmit=event=>{
      event.preventDefault();
      if(contact.reportValidity()) alert("±íµ¥Ð£Ñéͨ¹ý");
    };
    </script>

¶þ¡¢Êý¾Ý½Ó¿Ú·¶Àý

  1. GET¶ÁÈ¡Áбí

    Áбí½Ó¿Ú½Ó¹ÜÒ³Âë²¢·µ»ØÊý¾ÝÊý×飻ҪÇóʧ°Üʱ¸ø³öÃ÷È·ÌáÐÑ£¬Ô¤·À¿ÕÈ±ÇøÓò¿´ÆðÀ´Ïñ¼ÓÔØÖС£

    async function loadItems(){
      const res=await fetch("/api/items?page=1");
      if(!res.ok) throw new Error("Áбí¶Áȡʧ°Ü");
      const data=await res.json();
      console.log(data.items);
    }
  2. POSTÌá½»±íµ¥

    ´´½¨¼Í¼ʱ½«±íµ¥ÄÚÈÝÐòÁл¯Îª JSON¡£·þÎñ¶ËÓ¦ÔÙ´ÎУÑé×ֶΣ¬²»ÄÜÖ»ÒÀ¸½ä¯ÀÀÆ÷¶ËÏÞ¶È¡£

    const payload={name:"ÇàºÌ",message:"Õ÷Ñ¯ÍøÕ¾Ôì×÷"};
    const res=await fetch("/api/messages",{
      method:"POST",
      headers:{"Content-Type":"application/json"},
      body:JSON.stringify(payload)
    });
    const result=await res.json();
  3. ·ÖÒ³Êý¾Ý½á¹¹

    ·ÖÒ³ÏìӦͬʱÌṩµ±Ç°Ò³¡¢×ÜÒ³ÊýºÍ¼Í¼Áбí£¬Ç°¶Ë¾Ý´Ë»æÔìÒ³Â룬²¢ÔÚ×îºóÒ»Ò³½ûÓá°ÏÂÒ»Ò³¡±¡£

    {
      "page": 2,
      "pageSize": 10,
      "total": 23,
      "items": [
        {"id": 11, "title": "Æ·ÅÆÊÓ¾õÕû¶Ù"},
        {"id": 12, "title": "ÍøÕ¾À¸Ä¿¹æ»®"}
      ]
    }
  4. ÎļþÉÏ´«ÒªÇó

    ʹÓà FormData ´«µÝÎļþ£¬ä¯ÀÀÆ÷»á×Ô¶¯ÌìÉú multipart ÒªÇóÍ·£»ÉÏ´«Ç°»¹Ó¦ÔÚ·þÎñ¶ËÏÞ¶ÈÎļþÀàÐͺʹóÓס£

    const formData=new FormData();
    formData.append("image",fileInput.files);
    const res=await fetch("/api/uploads",{method:"POST",body:formData});
    const result=await res.json();
    console.log(result.fileName);

Õâ12ÀàÍøÕ¾´úÂ븲¸ÇÁ˳£¼ûÒ³Ãæ¹Ç¼Ü¡¢½»»¥×é¼þÓëÊý¾Ý»¥»»·½Ê½¡£´î½¨ÆëÈ«ÏîĿʱ£¬¿ÉÏÈ×éºÏµ¼º½À¸¡¢½¹µãÇøºÍ¿¨Æ¬Áбí£¬ÔÙ°´ÏÖʵҵÎñ½ÓÈë±íµ¥Óë½Ó¿Ú£»³Á¸´Ê¹ÓõÄÐÎ×´ºÍÒªÇóÂß¼­ÔòÊʺϲð·Ö³É¶ÀÁ¢Ä£¿é£¬±ãÓÚÊØ»¤¡£

[ÔðÈαà×룺¾´Ò»µ¤]

ΪÄúÍÆ¼ö

ÈȵãÎÄÕÂ

½Ü³öÊÓÆµ

·ï»Ë×ÊѶ¹Ù·½Î¢ÐÅ
·ï»Ë×ÊѶ¹Ù·½Î¢ÐÅ
¹Ø×¢¸ü¶à×ÊѶ
¡¾ÍøÕ¾µØÍ¼¡¿