欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js實(shí)現(xiàn)驗(yàn)證碼功能

 更新時(shí)間:2020年07月24日 17:27:58   作者:60rzvvbj  
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)驗(yàn)證碼功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了js實(shí)現(xiàn)驗(yàn)證碼功能的具體代碼,供大家參考,具體內(nèi)容如下

#前面是拆解著講的,不想看可以直接跳過,帶注釋的完整版代碼和效果在后面

首先在頁面中準(zhǔn)備一個(gè)輸入框,一個(gè)顯示驗(yàn)證碼的盒子和一個(gè)提交按鈕

<body>
 <input type="text">
 <div></div>
 <button>提交</button>
</body>

然后加一些樣式

input {
 width: 150px;
 height: 30px;
 outline: none;
 font-size: 24px;
 vertical-align: middle;
}

button {
 outline: none;
 vertical-align: middle;
 cursor: pointer;
}

div {
 display: inline-block;
 width: 90px;
 height: 40px;
 line-height: 40px;
 text-align: center;
 vertical-align: middle;
 background-color: #ddd;
 cursor: pointer;
}

然后大概長這樣(有點(diǎn)丑,不過無所謂,主要內(nèi)容是js)

好,那么開始寫js

首先獲取這些元素

var input = document.querySelector('input');
var btn = document.querySelector('button');
var div = document.querySelector('div');

然后搞一個(gè)字符庫和一個(gè)保存驗(yàn)證碼的字符串

var characters = "QWETYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890";
var str;

那個(gè)字符庫就直接滾鍵盤就行了~

因?yàn)轵?yàn)證碼要多次用到隨機(jī)數(shù),所以為了方便就先搞一個(gè)隨機(jī)數(shù)的函數(shù)

function getRandom(l, r) {
 return parseInt(l + Math.random() * (r - l + 1));
}

因?yàn)槭球?yàn)證碼,所以不能讓生成的文本可以直接被選中復(fù)制,所以給加一個(gè)文本不可選中

div.addEventListener('selectstart', function (e) {
 e.preventDefault();
})

因?yàn)轵?yàn)證碼不是每次刷新頁面就生成一次,看不清是可以換的,要多次生成,所以就把生成驗(yàn)證碼的部分寫在一個(gè)函數(shù)里

function run() {
 str = '';
 while (div.hasChildNodes()) {
 div.removeChild(div.firstChild);
 }
 for (var i = 0; i < 4; i++) {
 var span = document.createElement('span');
 span.innerHTML = characters[getRandom(0, characters.length - 1)];
 span.style.display = 'inline-block';
 span.style.fontSize = getRandom(16, 32) + 'px';
 span.style.color = 'rgb(' + getRandom(0, 200) + ',' + getRandom(0, 200) + ',' + getRandom(0, 200) + ')';
 span.style.transform = 'translate(' + getRandom(-5, 5) + 'px, ' + getRandom(-5, 5) + 'px) rotate(' + getRandom(-20, 20) + 'deg)';
 str += span.innerHTML;
 div.appendChild(span);
 }
}

大概說明一下這部分,原理大概就是創(chuàng)建4(我搞的是4位的驗(yàn)證碼)個(gè)span,然后分別隨機(jī)設(shè)置文本、字體大小、字體顏色、平移旋轉(zhuǎn)啥的,然后把span添加到div里成為div的子節(jié)點(diǎn),然后不要忘了讓str變量儲存一下驗(yàn)證碼的字符

每次生成之前先將上一次生成的驗(yàn)證碼刪掉(即把div里的所有子節(jié)點(diǎn)刪除掉),并且把str重置

然后頁面刷新的時(shí)候生成一次(調(diào)用一次),每次點(diǎn)擊div的時(shí)候重新生成一次(每次點(diǎn)擊調(diào)用一次)

run();
div.addEventListener('click', run);

再給提交按鈕添加點(diǎn)擊事件:判斷驗(yàn)證輸入的驗(yàn)證碼對不對,然后刷新驗(yàn)證碼,并且自動將輸入框中的文本清除

btn.addEventListener('click', function () {
 if (input.value.toLowerCase() == str.toLowerCase()) {
 alert('驗(yàn)證成功');
 } else {
 alert('驗(yàn)證失敗');
 }
 run();
 input.value = '';
})

判斷驗(yàn)證碼這里我為了不區(qū)分大小寫用了toLowerCase()函數(shù)將兩個(gè)字符串都轉(zhuǎn)化成小寫之后再做的比較

至此,功能就都實(shí)現(xiàn)的差不多了

看效果:

帶注釋的完整版代碼如下:

<!DOCTYPE html>
<html lang="ch-ZN">

<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>js實(shí)現(xiàn)驗(yàn)證碼</title>
 <style>
 input {
  width: 150px;
  height: 30px;
  outline: none;
  font-size: 24px;
  vertical-align: middle;
 }

 button {
  outline: none;
  vertical-align: middle;
  cursor: pointer;
 }

 div {
  display: inline-block;
  width: 90px;
  height: 40px;
  line-height: 40px;
  text-align: center;
  vertical-align: middle;
  background-color: #ddd;
  cursor: pointer;
 }
 </style>
</head>

<body>
 <input type="text">
 <div></div>
 <button>提交</button>
 <script>
 // 獲取元素
 var input = document.querySelector('input');
 var btn = document.querySelector('button');
 var div = document.querySelector('div');

 // 搞一個(gè)字符庫
 var characters = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890";
 var str; // str用來儲存驗(yàn)證碼的文本

 // 生成一個(gè)在[l,r]范圍內(nèi)的隨機(jī)整數(shù)的函數(shù)
 function getRandom(l, r) {
  return parseInt(l + Math.random() * (r - l + 1));
 }

 // 設(shè)置文本不可選中
 div.addEventListener('selectstart', function (e) {
  e.preventDefault();
 })

 // 生成驗(yàn)證碼的函數(shù)
 function run() {

  // 先重置str
  str = '';

  // 刪除掉div中的所有子節(jié)點(diǎn)
  while (div.hasChildNodes()) {
  div.removeChild(div.firstChild);
  }

  // 生成由四個(gè)字符組成的驗(yàn)證碼
  for (var i = 0; i < 4; i++) {

  // 創(chuàng)建一個(gè)span對象
  var span = document.createElement('span');

  // 設(shè)置文本(從字庫中隨機(jī)抽取一個(gè)字符)
  span.innerHTML = characters[getRandom(0, characters.length - 1)];

  // 設(shè)置一些隨機(jī)的樣式
  span.style.display = 'inline-block';
  span.style.fontSize = getRandom(16, 32) + 'px';
  span.style.color = 'rgb(' + getRandom(0, 200) + ',' + getRandom(0, 200) + ',' + getRandom(0, 200) + ')';
  span.style.transform = 'translate(' + getRandom(-5, 5) + 'px, ' + getRandom(-5, 5) + 'px) rotate(' + getRandom(-20, 20) + 'deg)';
  str += span.innerHTML; // str記錄字符
  div.appendChild(span); // 將span添加到div中
  }
 }


 run(); // 每次打開/刷新頁面時(shí)先調(diào)用一次
 div.addEventListener('click', run); // 每次點(diǎn)擊驗(yàn)證碼的時(shí)候調(diào)用一次

 // 提交按鈕點(diǎn)擊事件
 btn.addEventListener('click', function () {
  if (input.value.toLowerCase() == str.toLowerCase()) {
  alert('驗(yàn)證成功');
  } else {
  alert('驗(yàn)證失敗');
  }
  run();
  input.value = '';
 })
 </script>
</body>

</html>

以上

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • javascript addBookmark 加入收藏 多瀏覽器兼容

    javascript addBookmark 加入收藏 多瀏覽器兼容

    不錯(cuò)的加入收藏代碼,加入了對一些常見瀏覽器的判斷,更好的體現(xiàn)用戶體驗(yàn),兼容了ie,firefox.
    2009-08-08
  • JavaScript獲取當(dāng)前url根目錄(路徑)

    JavaScript獲取當(dāng)前url根目錄(路徑)

    本文主要介紹JavaScript獲取當(dāng)前url根目錄的方法,比較實(shí)用,需要的朋友可以參考一下。
    2016-06-06
  • JavaScript BASE64算法實(shí)現(xiàn)(完美解決中文亂碼)

    JavaScript BASE64算法實(shí)現(xiàn)(完美解決中文亂碼)

    這篇文章主要介紹了JavaScript BASE64算法實(shí)現(xiàn)(完美解決中文亂碼),先用escape()對中文進(jìn)行編碼.然后再進(jìn)行base64編碼. 解碼時(shí),再加入()對中文進(jìn)行解碼,這樣就可以避免中文亂碼問題
    2017-01-01
  • 解決bootstrap中下拉菜單點(diǎn)擊后不關(guān)閉的問題

    解決bootstrap中下拉菜單點(diǎn)擊后不關(guān)閉的問題

    今天小編就為大家分享一篇解決bootstrap中下拉菜單點(diǎn)擊后不關(guān)閉的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • JavaScript實(shí)現(xiàn)樓層效果

    JavaScript實(shí)現(xiàn)樓層效果

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)樓層效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • CocosCreator Typescript制作俄羅斯方塊游戲

    CocosCreator Typescript制作俄羅斯方塊游戲

    目前關(guān)于cocos開發(fā)俄羅斯方塊的文章幾乎寥寥無幾,因此本文將主要介紹如何通過CocosCreator Typescript制作簡單的俄羅斯方塊游戲,代碼具有一定價(jià)值,感興趣的同學(xué)可以學(xué)習(xí)一下
    2021-11-11
  • JS繼承定義與使用方法簡單示例

    JS繼承定義與使用方法簡單示例

    這篇文章主要介紹了JS繼承定義與使用方法,結(jié)合完整實(shí)例形式分析了JavaScript繼承的基本定義、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-02-02
  • Js中forEach修改原數(shù)組與sort排序經(jīng)典場景詳解

    Js中forEach修改原數(shù)組與sort排序經(jīng)典場景詳解

    forEach是沒有返回值并且不直接改變原數(shù)組的,今天發(fā)現(xiàn)是不能直接改變,下面這篇文章主要給大家介紹了關(guān)于Js中forEach修改原數(shù)組與sort排序經(jīng)典場景的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • js操作cookie保存瀏覽記錄的方法

    js操作cookie保存瀏覽記錄的方法

    這篇文章主要介紹了js操作cookie保存瀏覽記錄的方法,涉及JavaScript使用cookie記錄并保存用戶瀏覽網(wǎng)頁信息的實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-12-12
  • Js獲取當(dāng)前日期時(shí)間及格式化代碼

    Js獲取當(dāng)前日期時(shí)間及格式化代碼

    這篇文章主要為大家詳細(xì)介紹了Js獲取當(dāng)前日期時(shí)間及格式化代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09

最新評論