{"id":1894,"date":"2026-05-13T15:04:50","date_gmt":"2026-05-13T07:04:50","guid":{"rendered":"https:\/\/www.52runoob.com\/?p=1894"},"modified":"2026-05-13T15:04:52","modified_gmt":"2026-05-13T07:04:52","slug":"%e5%a6%82%e4%bd%95%e4%bd%bf%e7%94%a8htmljavascript%e5%ae%9e%e7%8e%b0%e6%bb%91%e5%8a%a8%e9%aa%8c%e8%af%81%e7%a0%81","status":"publish","type":"post","link":"https:\/\/www.52runoob.com\/index.php\/2026\/05\/13\/%e5%a6%82%e4%bd%95%e4%bd%bf%e7%94%a8htmljavascript%e5%ae%9e%e7%8e%b0%e6%bb%91%e5%8a%a8%e9%aa%8c%e8%af%81%e7%a0%81\/","title":{"rendered":"\u5982\u4f55\u4f7f\u7528HTML+JavaScript\u5b9e\u73b0\u6ed1\u52a8\u9a8c\u8bc1\u7801"},"content":{"rendered":"\n<p>\u5f53\u7136\u53ef\u4ee5\uff01\u6211\u6765\u7ed9\u4f60\u4e00\u4e2a\u5b8c\u6574\u7684\u601d\u8def\u548c\u793a\u4f8b\uff0c\u6559\u4f60\u7528 <strong>HTML + JavaScript<\/strong> \u5b9e\u73b0\u4e00\u4e2a <strong>\u6ed1\u52a8\u9a8c\u8bc1\u7801<\/strong>\u3002\u6211\u4f1a\u628a\u91cd\u70b9\u8bb2\u6e05\u695a\uff0c\u540c\u65f6\u7ed9\u51fa\u53ef\u8fd0\u884c\u7684\u793a\u4f8b\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">1\ufe0f\u20e3 \u6ed1\u52a8\u9a8c\u8bc1\u7801\u539f\u7406<\/h2>\n\n\n\n<p>\u6ed1\u52a8\u9a8c\u8bc1\u7801\u901a\u5e38\u5305\u542b\u4ee5\u4e0b\u51e0\u4e2a\u90e8\u5206\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u80cc\u666f\u56fe<\/strong>\uff1a\u6709\u4e00\u5757\u7f3a\u53e3\u7684\u5b8c\u6574\u56fe\u7247\u3002<\/li>\n\n\n\n<li><strong>\u6ed1\u5757<\/strong>\uff1a\u7528\u6237\u62d6\u52a8\u6ed1\u5757\u53bb\u586b\u8865\u7f3a\u53e3\u3002<\/li>\n\n\n\n<li><strong>\u9a8c\u8bc1\u903b\u8f91<\/strong>\uff1a\u5224\u65ad\u6ed1\u5757\u662f\u5426\u4e0e\u7f3a\u53e3\u5bf9\u9f50\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u6838\u5fc3\u539f\u7406\u662f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5728\u539f\u56fe\u4e0a\u968f\u673a\u751f\u6210\u4e00\u4e2a\u7f3a\u53e3\u4f4d\u7f6e\u3002<\/li>\n\n\n\n<li>\u7528\u6237\u62d6\u52a8\u6ed1\u5757\u5230\u5bf9\u5e94\u4f4d\u7f6e\u3002<\/li>\n\n\n\n<li>\u5224\u65ad\u6ed1\u5757\u7684\u6700\u7ec8\u4f4d\u7f6e\u662f\u5426\u4e0e\u7f3a\u53e3\u91cd\u5408\uff08\u5141\u8bb8\u4e00\u5b9a\u8bef\u5dee\uff09\u3002<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2\ufe0f\u20e3 HTML\u7ed3\u6784<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&amp;lt;div class=&quot;captcha-container&quot;&gt;\n  &amp;lt;canvas id=&quot;captchaCanvas&quot; width=&quot;310&quot; height=&quot;155&quot;&gt;&amp;lt;\/canvas&gt;\n  &amp;lt;div class=&quot;slider-container&quot;&gt;\n    &amp;lt;div id=&quot;slider&quot; class=&quot;slider&quot;&gt;\u2b1c&amp;lt;\/div&gt;\n  &amp;lt;\/div&gt;\n&amp;lt;\/div&gt;\n&amp;lt;p id=&quot;result&quot;&gt;&amp;lt;\/p&gt;\n\n<\/pre><\/div>\n\n\n<p>\u8bf4\u660e\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>canvas<\/code> \u7528\u6765\u7ed8\u5236\u80cc\u666f\u56fe\u548c\u7f3a\u53e3\u3002<\/li>\n\n\n\n<li><code>slider<\/code> \u662f\u53ef\u4ee5\u62d6\u52a8\u7684\u6ed1\u5757\u3002<\/li>\n\n\n\n<li><code>result<\/code> \u663e\u793a\u9a8c\u8bc1\u7ed3\u679c\u3002<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3\ufe0f\u20e3 CSS\u6837\u5f0f<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n.captcha-container {\n  position: relative;\n  width: 310px;\n}\n\n.slider-container {\n  width: 310px;\n  height: 40px;\n  background: #eee;\n  border-radius: 20px;\n  margin-top: 10px;\n  position: relative;\n}\n\n.slider {\n  width: 40px;\n  height: 40px;\n  background: #ccc;\n  border-radius: 50%;\n  position: absolute;\n  left: 0;\n  top: 0;\n  cursor: pointer;\n  text-align: center;\n  line-height: 40px;\n  font-size: 24px;\n  user-select: none;\n}\n\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4\ufe0f\u20e3 JavaScript\u903b\u8f91<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nconst canvas = document.getElementById(&#039;captchaCanvas&#039;);\nconst ctx = canvas.getContext(&#039;2d&#039;);\nconst slider = document.getElementById(&#039;slider&#039;);\nconst result = document.getElementById(&#039;result&#039;);\n\nconst canvasWidth = canvas.width;\nconst canvasHeight = canvas.height;\n\nlet blockX = 0; \/\/ \u7f3a\u53e3\u7684X\u5750\u6807\nconst blockSize = 50; \/\/ \u7f3a\u53e3\u5bbd\u5ea6\nconst tolerance = 5; \/\/ \u8bef\u5dee\u8303\u56f4\n\n\/\/ 1. \u7ed8\u5236\u80cc\u666f\u548c\u7f3a\u53e3\nfunction drawCaptcha() {\n  \/\/ \u968f\u673a\u7f3a\u53e3\u4f4d\u7f6e\n  blockX = Math.floor(Math.random() * (canvasWidth - blockSize - 20)) + 10;\n\n  \/\/ \u80cc\u666f\n  ctx.fillStyle = &#039;#c0c0c0&#039;;\n  ctx.fillRect(0, 0, canvasWidth, canvasHeight);\n\n  \/\/ \u7f3a\u53e3\n  ctx.fillStyle = &#039;#fff&#039;;\n  ctx.fillRect(blockX, 55, blockSize, blockSize);\n}\n\ndrawCaptcha();\n\n\/\/ 2. \u6ed1\u5757\u62d6\u52a8\u903b\u8f91\nlet isDragging = false;\nlet startX = 0;\n\nslider.addEventListener(&#039;mousedown&#039;, function(e) {\n  isDragging = true;\n  startX = e.clientX - slider.offsetLeft;\n});\n\ndocument.addEventListener(&#039;mousemove&#039;, function(e) {\n  if (!isDragging) return;\n  let moveX = e.clientX - startX;\n\n  \/\/ \u9650\u5236\u6ed1\u5757\u8303\u56f4\n  moveX = Math.max(0, Math.min(moveX, canvasWidth - slider.offsetWidth));\n  slider.style.left = moveX + &#039;px&#039;;\n});\n\ndocument.addEventListener(&#039;mouseup&#039;, function(e) {\n  if (!isDragging) return;\n  isDragging = false;\n\n  const finalX = parseInt(slider.style.left);\n\n  if (Math.abs(finalX - blockX) &amp;lt;= tolerance) {\n    result.textContent = &#039;\u2705 \u9a8c\u8bc1\u901a\u8fc7&#039;;\n  } else {\n    result.textContent = &#039;\u274c \u9a8c\u8bc1\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5&#039;;\n    slider.style.left = &#039;0px&#039;;\n    drawCaptcha();\n  }\n});\n\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">5\ufe0f\u20e3 \u529f\u80fd\u8bf4\u660e<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u968f\u673a\u7f3a\u53e3<\/strong>\uff1a\u6bcf\u6b21\u5237\u65b0\u6216\u9a8c\u8bc1\u5931\u8d25\u540e\u90fd\u4f1a\u751f\u6210\u65b0\u7684\u7f3a\u53e3\u3002<\/li>\n\n\n\n<li><strong>\u6ed1\u5757\u62d6\u52a8<\/strong>\uff1a\u62d6\u52a8\u6ed1\u5757\u65f6\u4f4d\u7f6e\u53d7\u9650\uff0c\u9632\u6b62\u8d85\u51fa\u8303\u56f4\u3002<\/li>\n\n\n\n<li><strong>\u8bef\u5dee\u5224\u65ad<\/strong>\uff1a\u5141\u8bb8 \u00b15px \u8bef\u5dee\uff0c\u7528\u6237\u4f53\u9a8c\u66f4\u597d\u3002<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">6\ufe0f\u20e3 \u53ef\u4f18\u5316\u70b9<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4f7f\u7528\u771f\u5b9e\u56fe\u7247<\/strong>\u4ee3\u66ff\u7eaf\u8272\u80cc\u666f\uff0c\u66f4\u96be\u88ab\u673a\u5668\u4eba\u8bc6\u522b\u3002<\/li>\n\n\n\n<li><strong>\u7f3a\u53e3\u5f62\u72b6<\/strong>\u53ef\u4ee5\u662f\u62fc\u56fe\u6837\u5f0f\uff0c\u66f4\u5b89\u5168\u3002<\/li>\n\n\n\n<li><strong>\u79fb\u52a8\u7aef\u89e6\u63a7\u652f\u6301<\/strong>\uff1a\u7528 <code>touchstart<\/code>\u3001<code>touchmove<\/code>\u3001<code>touchend<\/code>\u3002<\/li>\n\n\n\n<li><strong>\u540e\u7aef\u9a8c\u8bc1<\/strong>\uff1a\u5c06\u7f3a\u53e3\u4f4d\u7f6e\u548c\u6ed1\u5757\u4f4d\u7f6e\u53d1\u9001\u5230\u540e\u7aef\u9a8c\u8bc1\uff0c\u9632\u6b62\u88ab\u7ed5\u8fc7\u3002<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>\u5f53\u7136\u53ef\u4ee5\uff01\u6211\u6765\u7ed9\u4f60\u4e00\u4e2a\u5b8c\u6574\u7684\u601d\u8def\u548c\u793a\u4f8b\uff0c\u6559\u4f60\u7528 HTML + JavaScrip&#8230; <a class=\"more-link\" href=\"https:\/\/www.52runoob.com\/index.php\/2026\/05\/13\/%e5%a6%82%e4%bd%95%e4%bd%bf%e7%94%a8htmljavascript%e5%ae%9e%e7%8e%b0%e6%bb%91%e5%8a%a8%e9%aa%8c%e8%af%81%e7%a0%81\/\">Continue Reading &rarr;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1894","post","type-post","status-publish","format-standard","hentry","category-1"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts\/1894","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/comments?post=1894"}],"version-history":[{"count":1,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts\/1894\/revisions"}],"predecessor-version":[{"id":1895,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts\/1894\/revisions\/1895"}],"wp:attachment":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/media?parent=1894"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/categories?post=1894"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/tags?post=1894"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}