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

簡易的投票系統(tǒng)以及js刷票思路和方法

 更新時間:2015年04月07日 10:55:10   投稿:hebedich  
這篇文章主要介紹了簡易的投票系統(tǒng)以及js刷票思路和方法,文章十分的詳盡,思路也很清晰,是篇非常不錯的文章,這里推薦給大家,有需要的小伙伴可以參考下。

早就聽說有什么刷票腳本,微博投票等等相關(guān)的投票都有某些人去刷票。

試一下吧,興許自己也會刷票呢?搗鼓了幾個小時,終于有所眉目。

(1)投票系統(tǒng)

要刷票,就得先有個投票界面。

當(dāng)然,可以直接去各個投票網(wǎng)站就行,不過這里還是自己弄個投票頁面,方便自己。

頁面大致如下 或者 查看演示

照理,界面很簡潔,但也基本有了投票的基本功能。

原始規(guī)則是:只能投一次票,然后提示成功,然后按鈕不可用。

都是原生JS,DOM操作不靈活的可以借此練練手。當(dāng)然,用jq將會很便捷。

html/css部分

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<head>
<title>投票系統(tǒng) & js腳本簡單刷票</title>
<style type="text/css">

  *{padding: 0;margin: 0;}
  #wrap{margin: 0 auto; width:600px; text-align: center;}
  .person{position: relative; margin: 20px; float: left;}
  .person h4,
  .person p, 
  .person button{margin-bottom: 5px;}
  .person h4{color: blue;}
  .person span{color: red;}
  .person button:hover{cursor: pointer; font-weight: bold;}
  .clear{clear: both;}
</style>

</head>
<body>

<div id="wrap">
<h3>給你的小伙伴投上一票吧</h3>
  <div class="person">
    <h4>one</h4>
    <p>總票數(shù): <span>0</span> 票</p>
    <button>給它投票</button>
  </div>
  <div class="person">
    <h4>two</h4>
    <p>總票數(shù): <span>0</span> 票</p>
    <button>給它投票</button>
  </div>
  <div class="person">
    <h4>three</h4>
    <p>總票數(shù): <span>0</span> 票</p>
    <button>給它投票</button>
  </div>
  <div class="person">
    <h4>four</h4>
    <p>總票數(shù): <span>0</span> 票</p>
    <button>給它投票</button>
  </div>
  <div class="clear"></div>
</div>

js部分

<script type="text/javascript">
function getElemensByClassName(className){  // 通過class獲取
  var classArr = new Array();
  var tags = document.getElementsByTagName("*"); //獲取所有節(jié)點
  for(var item in tags){ 
    if(tags[item].nodeType == 1){ 
    if(tags[item].getAttribute("class") == className){ 
      classArr.push(tags[item]); //收集class匹配的節(jié)點
    }
  }
}
  return classArr;
}

function delete_FF(element){  // 在FireFox中刪除子節(jié)點為空的元素
  var childs = element.childNodes;
  for(var i=0;i<childs.length;i++){ 
    var pattern = /\s/; //模式匹配,內(nèi)容為空
    if(childs[i].nodeName == "#text" && pattern.test(childs[i].nodeValue)){  //處理
      //alert(childs[i].nodeName);
      element.removeChild(childs[i]); //刪除FF中獲取的空節(jié)點
    }
  }
}

window.onload = function(){ 
  var persons = getElemensByClassName("person");
//  alert(persons);
  for(var item in persons){  //遍歷所有person,為它們綁定投票事件
    (function(_item){    //匿名函數(shù)傳入item, 防止因作用域問題導(dǎo)致item總為最后一個
    delete_FF(persons[_item]); //出去FF中空行代表的子節(jié)點
    persons[_item].setAttribute("id","person"+(parseInt(_item)+1)); //賦上id

    var childs = persons[_item].childNodes;
    for(var i = 0;i<childs.length;i++){ 
      //alert(childs[i].nodeName);
      if(childs[i].nodeName == "BUTTON"){  //點擊按鈕投票
        var oButton = childs[i];
      }
      if(childs[i].nodeName == "P"){  //投票結(jié)果更新
        var oP = childs[i];
        var oSpan = oP.getElementsByTagName("span")[0];
      }
    }
    if(oButton != null){
    oButton.onclick = function(){  //事件綁定
      var num = oSpan.innerHTML; //獲取票數(shù)
      oSpan.innerHTML = (++num); //票數(shù)更新
                    // 這時一般我們可能就需要把這個票數(shù)num傳送給服務(wù)器保存,更新時也是和服務(wù)器中的num同步
      this.setAttribute("disabled","true"); // 一般只能投票一次的吧
      alert("投票成功,謝謝您的支持");
    };
  }
})(item); // 傳入各項person
  }
};
</script>

注釋應(yīng)該比較清晰了,一個簡單的投票頁面。

(2)刷票腳本實現(xiàn)

刷票腳本,意思就是通過腳本實現(xiàn)投票,怎么實現(xiàn)投票?

通過上面的代碼我們知道一般投票就是點擊“投票”,從而數(shù)據(jù)得到處理。

前端有一個票數(shù)統(tǒng)計num,后端也有一個票數(shù)統(tǒng)計num,它們是同步的,我們無需理會后端的num,因為前端和后端是同步的。

click事件觸發(fā)時候,js自然會將num同步好。我們要刷票,其實就是觸發(fā)click事件就行了。

而且,投票系統(tǒng)是別人的頁面,我們也無權(quán)修改,我們能做的,其實也就是通過js模擬事件的發(fā)生。

那自己寫好腳本了,該怎么用?

一般就是使用控制臺模式,比如FireFox Chrome的控制臺,把自己寫的腳本放進(jìn)去,它自會解析執(zhí)行,處理頁面數(shù)據(jù)。

比如這里的FireBug的控制臺里頭,左邊就是信息展示,右邊可以輸入js代碼。

或者用chrome的控制臺也可以,在里邊輸入js回車執(zhí)行就好

如果還沒使用過這些東西的童鞋可以去搜一下相關(guān)知識。

那就寫一個簡單的刷票腳本吧

首先,我們按照正規(guī)方式,假設(shè)投票頁面不是我們寫的,我們要怎么刷票?

我們必然要找出投票的關(guān)鍵點。

用審查元素找一下吧,一般就是那個投票按鈕。

點擊那個,然后把鼠標(biāo)移動到投票頁面的按鈕試試?在頁面中搜尋其他標(biāo)簽信息,比如id class等等,方便等會用到。

好,確定好相關(guān)信息,id 標(biāo)簽類型等等。

現(xiàn)在,我想給two刷票,每兩秒鐘就給他投一次。我的目的是讓two的總票數(shù)要保持大于three的(當(dāng)然,隨你怎么想)

那就開始寫代碼吧,習(xí)慣了jquery,在控制臺中也可以直接使用。

或者再舊版本一點的不支持jquery的話,就在代碼里邊加上:

javascript:(function(url) {
  var s = document.createElement('script');
  s.src = url;
  (document.getElementsByTagName('head')[0] ||
    document.getElementsByTagName('body')[0]).appendChild(s);
})('http://code.jquery.com/jquery-2.1.3.js');

正式開始

1.寫一個通用刷票函數(shù)

function brushVotes(){  //刷票函數(shù)
var t = setInterval(function(){
 var three_num = $("#person3>p>span").text(); //three票數(shù)
 var two_num  = $("#person2>p>span").text();  // two票數(shù)
 console.info(two_num+" "+three_num);
 
 if(two_num - three_num < 5){  //要保持領(lǐng)先5票的優(yōu)勢
  $("#person2>button").click().attr("disabled",false); //觸發(fā)投票的事件click,投完后記得把投票權(quán)限拿回來
 }
 if(two_num - three_num == 5){ //5票領(lǐng)先了就此打住
  clearInterval(t);
 }
 
},2000);
}

使用一個定時器,每兩秒執(zhí)行一次投票事件。領(lǐng)先5票后就暫停。

2.調(diào)用刷票函數(shù)

初始調(diào)用一次,點擊運行時,腳本自然就執(zhí)行了。

然后監(jiān)聽three票數(shù)的改變,作出綁定處理。

普通的change事件只有那些表單相關(guān)的標(biāo)簽元素才能支持的。我們當(dāng)然可以把票數(shù)中的span改為input標(biāo)簽,讓它擁有onchange事件。

但頁面是別人的,我們改不了。

所以找啊找,終于找到檢測其他諸如div span 等標(biāo)簽內(nèi)容改變的方法。如果想深入理解這種方法 welcome

brushVotes(); // 刷票
$("#person3>p>span").bind('DOMNodeInserted', function(e) { //three改變則 觸發(fā)
 brushVotes(); //繼續(xù)刷票
});

這樣一來,three票數(shù)改變了,就會自動觸發(fā)繼續(xù)刷票。

完整腳本

javascript:(function(url) {
  var s = document.createElement('script');
  s.src = url;
  (document.getElementsByTagName('head')[0] ||
    document.getElementsByTagName('body')[0]).appendChild(s);
})('http://code.jquery.com/jquery-2.1.3.js');


brushVotes(); // 刷票
$("#person3>p>span").bind('DOMNodeInserted', function(e) { //three改變則 觸發(fā)
 brushVotes(); //繼續(xù)刷票
});

function brushVotes(){  //刷票函數(shù)
var t = setInterval(function(){
 var three_num = $("#person3>p>span").text(); //three票數(shù)
 var two_num  = $("#person2>p>span").text();  // two票數(shù)
 console.info(two_num+" "+three_num);
 
 if(two_num - three_num < 5){  //要保持領(lǐng)先5票的優(yōu)勢
  $("#person2>button").click().attr("disabled",false); //觸發(fā)投票的事件click,投完后記得把投票權(quán)限拿回來
 }
 if(two_num - three_num == 5){ //5票領(lǐng)先了就此打住
  clearInterval(t);
 }
 
},2000);
}

最后,模擬一下

1.進(jìn)入投票頁面,調(diào)出Firebug,在控制臺右邊代碼輸入?yún)^(qū)鍵入完整代碼

2.然后先點擊左上角的運行,先讓two從零開始刷到5. 比three領(lǐng)先5票

這樣一直alert到5次

3.然后,模擬性的有人給three投了一票,點擊three的按鈕

4.檢測到three票數(shù)有變化了,two繼續(xù)刷票

5. 最后,刷到6票又暫停了

------------------------------------------------------------------------------------------------------

這就是簡單的刷票腳本實現(xiàn)。

通過這個最主要的是要學(xué)會怎么使用自己的腳本去操作別人的頁面。當(dāng)然,這和所謂的腳本注入不是一回事..

我們做的只是模擬正常頁面的事件,人工的去觸發(fā)它們。

通過這種機(jī)制,不僅可以進(jìn)行投票系統(tǒng)的刷票,也可以進(jìn)行暴力驗證登錄啊..但遇到驗證碼就虧大發(fā)了,也可以所謂的火車票搶票腳本啊..不過那應(yīng)該涉及到更多知識了。

相關(guān)文章

  • 關(guān)于跨站腳本攻擊問題

    關(guān)于跨站腳本攻擊問題

    這個問題我的理解是只要讓其他網(wǎng)站能執(zhí)行我的腳本我就有可能危害到,這個網(wǎng)站的用戶安全
    2011-12-12
  • 淺談mint-ui 填坑之路

    淺談mint-ui 填坑之路

    本篇文章主要介紹了淺談mint-ui 填坑之路,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • 對js中回調(diào)函數(shù)的一些看法

    對js中回調(diào)函數(shù)的一些看法

    下面小編就為大家?guī)硪黄獙s中回調(diào)函數(shù)的一些看法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • js制作提示框插件

    js制作提示框插件

    這篇文章主要介紹了js制作提示框插件的方法,幫助大家更好的理解和使用js,感興趣的朋友可以了解下
    2020-12-12
  • js 數(shù)組實現(xiàn)一個類似ruby的迭代器

    js 數(shù)組實現(xiàn)一個類似ruby的迭代器

    今天突然發(fā)現(xiàn)js的數(shù)組處理起來真是麻煩,代碼一些就是一大堆,相比起ruby的迭代器來真是遜色不少。
    2009-10-10
  • 探討跨域請求資源的幾種方式(總結(jié))

    探討跨域請求資源的幾種方式(總結(jié))

    這篇文章主要介紹了探討跨域請求資源的幾種方式(總結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • js判斷上傳文件后綴名是否合法

    js判斷上傳文件后綴名是否合法

    這篇文章主要介紹了js判斷上傳文件后綴名是否合法的具體方法,以一個完整實例分析了javascript判斷上傳文件后綴名是否合法的方法,感興趣的小伙伴們可以參考一下
    2016-01-01
  • JavaScript設(shè)計模式之單例模式原理與用法實例分析

    JavaScript設(shè)計模式之單例模式原理與用法實例分析

    這篇文章主要介紹了JavaScript設(shè)計模式之單例模式原理與用法,結(jié)合實例形式分析了單例模式的原理、命名空間的使用、閉包、惰性單例形式以及單例模式的基本應(yīng)用,需要的朋友可以參考下
    2018-07-07
  • 面向?qū)ο笤O(shè)計模式的核心法則

    面向?qū)ο笤O(shè)計模式的核心法則

    有本經(jīng)典的書叫《設(shè)計模式》,講了經(jīng)典的21種設(shè)計模式,建議大家都看看
    2013-11-11
  • javascript中不提供sleep功能如何實現(xiàn)這個功能

    javascript中不提供sleep功能如何實現(xiàn)這個功能

    javascript中不提供sleep功能,而我們時長會用到這個功能,下面與大家分享個不錯的解決方法,而且在不同的機(jī)器上的執(zhí)行速度是一致的
    2014-05-05

最新評論