最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一個(gè)仿微博登陸郵箱提示框js開(kāi)發(fā)案例

 更新時(shí)間:2016年07月28日 17:28:46   作者:macanfa  
這篇文章主要為大家詳細(xì)介紹了一個(gè)仿郵箱登錄提示框js開(kāi)發(fā)案例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

最近在好好的研究JS,通過(guò)一個(gè)仿郵箱登錄提示框的案例加深下對(duì)面向?qū)ο蟮睦斫?!啥都別說(shuō),先上圖:

功能:實(shí)現(xiàn)正則匹配顯示相符的內(nèi)容、鍵盤(pán)事件、鼠標(biāo)事件

簡(jiǎn)單布局:

<div id="login">
  <h2>仿微博登錄</h2>
  <div class="detail">
    <input type="text" placeholder='郵箱/會(huì)員賬號(hào)/手機(jī)號(hào)' autocomplete='off' class='name' id='nameInput' maxlength='18'>
  </div>
  <div class="detail">
    <input type="password" placeholder='請(qǐng)輸入密碼' autocomplete='off' class='password'>
  </div>
  <ul id='suggest'>
    <li class="note">請(qǐng)選擇郵箱類(lèi)型:</li>
    <li class="item" email=""></li>
    <li class="item" email="@sina.com">@sina.com</li>
    <li class="item" email="@163.com">@163.com</li>
    <li class="item" email="@qq.com">@qq.com</li>
    <li class="item" email="@126.com">@126.com</li>
    <li class="item" email="@sina.cn">@sina.cn</li>
    <li class="item" email="@139.com">@139.com</li>
  </ul>
</div>

CSS代碼:

body,ul,li,h2{margin:0;padding:0;color:#ccc;}
ul{list-style-type: none;}
#login{width:250px;background:#fff;border:1px solid #ccc;text-align: center;margin:10px auto;position:relative;}
#login h2{background:#FA7D3C;color:#fff;line-height:40px; }
.detail{}
.detail input{width:220px;height:30px;margin:10px auto;border:1px solid #ccc;padding-left:5px;}
#suggest{width:225px;height:auto;background:#fff;border:1px solid #ccc;position:absolute;top:84px;left:12px;display: none;}
#suggest li{width:225px;height:25px;line-height:25px;text-align: left;cursor: pointer;}
#suggest li.note{color:#989090;}
#suggest li.active{background:#eee;}

JS代碼:

window.onload=function(){
  var s1=new Suggest();
  s1.init();
};
function Suggest(){
  this.oInput=document.getElementById('nameInput');
  this.oUl=document.getElementById('suggest');
  this.aLi=this.oUl.getElementsByTagName('li');
}
Suggest.prototype={
  init:function(){
    this.toChange();
    this.toBlur();
  },
  toChange:function(){
    //ie:onpropertychange
    //標(biāo)準(zhǔn):oninput
    /*判斷IE瀏覽器最短方法:var isIE = !-[1,]*/
    var ie=!-[1,];
    //存this指向,this指向問(wèn)題
    var This=this;
    if(ie){
      this.oInput.onpropertychange=function(){
        if(This.oInput.value==''){
          This.tips();//?解決ie下空值時(shí)li新增內(nèi)容不置空情況
          return;
        }

        This.showUl();
        This.tips();
        This.sel(1);//選中第一條
      };
    }else{
      this.oInput.oninput=function(){
        This.showUl();
        This.tips();
        This.sel(1);//選中第一條
      }
    }
  },
  showUl:function(){
    this.oUl.style.display='block';
  },
  toBlur:function(){
    var This=this;
    this.oInput.onblur=function(){
      This.oUl.style.display='none';
    }
  },
  tips:function(){

    var value=this.oInput.value;
    //正則匹配
    var re=new RegExp('@'+value.substring(value.indexOf('@')+1)+'');
    // console.log(re);
    //bug修復(fù):全部?jī)?nèi)容一次性清空仍可出現(xiàn)提示
    for(var i=1;i<this.aLi.length;i++){
      this.aLi[i].style.display='block';
    }
    if(re.test(value)){//匹配@輸入后情況
      for(var i=1;i<this.aLi.length;i++){
        var oEmail=this.aLi[i].getAttribute('email');
        if(i==1){
          this.aLi[i].innerHTML=value;
        }else{

          if(re.test(oEmail)){//匹配項(xiàng)顯示,否則隱藏
            this.aLi[i].style.display='block';
          }else{
            this.aLi[i].style.display='none';
          }
        }
      }
    }else{//未輸入@之前
      for(var i=1;i<this.aLi.length;i++){
        var oEmail=this.aLi[i].getAttribute('email');
        if(!oEmail){
          this.aLi[i].innerHTML=value;
        }else{
          this.aLi[i].innerHTML=value+oEmail;
        }
      }
    }

  },
  sel:function(iNow){//傳入當(dāng)前索引

    var This=this;
    //每次改變重新設(shè)置類(lèi)型,不會(huì)重復(fù)
    for(var i=1;i<this.aLi.length;i++){
      this.aLi[i].className='item';
    }

    if(this.oInput.value==''){
      this.aLi[iNow].className='item';
    }else{
      this.aLi[iNow].className='active';
    }

    for(var i=1;i<this.aLi.length;i++){
      this.aLi[i].index=i;
      this.aLi[i].onmouseover=function(){
        for(var i=1;i<This.aLi.length;i++){
          This.aLi[i].className='item';
        }
        this.className='active';
        iNow=this.index;//當(dāng)前索引
      };
      //鼠標(biāo)點(diǎn)擊事件:
      this.aLi[i].onmousedown=function(){
        This.oInput.value=this.innerHTML;
      }
    }
    //鍵盤(pán)事件:
    this.oInput.onkeydown=function(e){
      var e=e||window.event;
      if(e.keyCode==38){//上

        if(iNow==1){
          iNow=This.aLi.length-1;
        }else{
          iNow--;
        }
        for(var i=1;i<This.aLi.length;i++){
          This.aLi[i].className='item';
        }
        This.aLi[iNow].className='active';

      }else if(e.keyCode==40){//下

        if(iNow==This.aLi.length-1){
          iNow=1;
        }else{
          iNow++;
        }
        for(var i=1;i<This.aLi.length;i++){
          This.aLi[i].className='item';
        }
        This.aLi[iNow].className='active';

      }else if(e.keyCode==13){//回車(chē)
        This.oInput.value=This.aLi[iNow].innerHTML;
        This.oInput.blur();//回車(chē)后觸發(fā)blur事件隱藏ul層
      }
    }
  }

}

需要處理好多個(gè)分支情況,處理好小細(xì)節(jié),也感覺(jué)面向?qū)ο笾斜容^常遇到是this指向的問(wèn)題,通過(guò)這個(gè)案例好好地理解了下this。

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

相關(guān)文章

  • 詳解如何替換項(xiàng)目中的if-else和switch

    詳解如何替換項(xiàng)目中的if-else和switch

    這篇文章主要為大家介紹了詳解如何替換項(xiàng)目中的if-else和switch,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 在js中做數(shù)字字符串補(bǔ)0(js補(bǔ)零)

    在js中做數(shù)字字符串補(bǔ)0(js補(bǔ)零)

    這篇文章主要介紹了在js中做數(shù)字字符串補(bǔ)0(js補(bǔ)零),需要的朋友可以參考下
    2017-03-03
  • 詳解微信小程序圖片地扯轉(zhuǎn)base64解決方案

    詳解微信小程序圖片地扯轉(zhuǎn)base64解決方案

    這篇文章主要介紹了詳解微信小程序圖片地扯轉(zhuǎn)base64解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Javascript彈出窗口的各種方法總結(jié)

    Javascript彈出窗口的各種方法總結(jié)

    這篇文章介紹了Javascript彈出窗口的各種方法總結(jié),有需要的朋友可以參考一下
    2013-11-11
  • Javascript的構(gòu)造函數(shù)和constructor屬性

    Javascript的構(gòu)造函數(shù)和constructor屬性

    我們知道,默認(rèn)情況下,對(duì)一個(gè)函數(shù)前面使用new,可以構(gòu)造出一個(gè)對(duì)象。每一個(gè)對(duì)象都有一個(gè)constructor屬性,這個(gè)constructor屬性指向構(gòu)造出該對(duì)象的函數(shù)。
    2010-01-01
  • js中string轉(zhuǎn)int把String類(lèi)型轉(zhuǎn)化成int類(lèi)型

    js中string轉(zhuǎn)int把String類(lèi)型轉(zhuǎn)化成int類(lèi)型

    今天碰到一個(gè)問(wèn)題,需要把String類(lèi)型的變量轉(zhuǎn)化成int類(lèi)型的,js中String轉(zhuǎn)int和Java中不一樣,不能直接把Java中的用到j(luò)s中
    2014-08-08
  • javascript中CheckBox全選終極方案

    javascript中CheckBox全選終極方案

    在javascript頁(yè)面中實(shí)現(xiàn)CheckBox或者Radio的選中狀態(tài)是一件很容易的事情,下面我們來(lái)給大家展示下在asp.net中使用javascript中CheckBox全選終極方案,有需要的小伙伴可以參考下。
    2015-05-05
  • 實(shí)例講解javascript注冊(cè)事件處理函數(shù)

    實(shí)例講解javascript注冊(cè)事件處理函數(shù)

    這篇文章主要以實(shí)例的方式向大家介紹了javascript注冊(cè)事件處理函數(shù),內(nèi)容很全面,感興趣的朋友可以參考一下
    2016-01-01
  • webpack中CommonsChunkPlugin詳細(xì)教程(小結(jié))

    webpack中CommonsChunkPlugin詳細(xì)教程(小結(jié))

    本篇文章主要介紹了webpack中CommonsChunkPlugin詳細(xì)教程(小結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • js驗(yàn)證上傳圖片的方法

    js驗(yàn)證上傳圖片的方法

    這篇文章主要介紹了js驗(yàn)證上傳圖片的方法,可對(duì)上傳圖片的類(lèi)型、大小等進(jìn)行限制,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-05-05

最新評(píng)論

沁水县| 涡阳县| 玉田县| 南涧| 麻江县| 连南| 恭城| 铁岭县| 仁怀市| 新平| 蒙城县| 秦皇岛市| 五常市| 安吉县| 项城市| 潮安县| 陆丰市| 化州市| 庐江县| 宝丰县| 平南县| 农安县| 揭阳市| 民和| 江川县| 四川省| 屏边| 新乡县| 思南县| 保定市| 沾化县| 手游| 乐东| 星子县| 和政县| 三明市| 德令哈市| 巴中市| 旬阳县| 霍林郭勒市| 佛山市|