使用jQuery創建模態窗口登陸效果


來源:GBin1.com

使用jQuery創建模態窗口登陸效果

在線下載 在線演示

隱藏模態窗口技術是一種很好的解決方案,用於處理不是特有必要出現在網頁上的界面元素。社交網絡可以使用模態窗口傳達私人訊息以及只針對會員才能看 到的表單。在博客和雜志網站也適用於與主網站分開的作者登陸頁面,模態窗口比在JavaScript中創建新窗口更容易,因為使用HTML標記顯示,所有 的東西能都呈現在同一個窗口中。

我將演示如何利用jQuery插件leanModal建立一個常規模態窗口。如果你有MIT general license,那么這個插件是完全開源和免費的,我很喜歡這個插件,用起來相當方便,還能自行添加CSS,達到自定義的效果。

在線演示——下載源代碼

使用jQuery創建模態窗口登陸效果

開始

首先創建兩個命名為“index.html”和“style.css”的文件,在同一個目錄中,創建另一個文件夾命名為/js/,包含進剛才兩個文件。第一個是微型jQuery庫,第二個是leanModal插件,命名為jquery.leanModal.min.js。

<!doctype html>
<html lang="en-US">
<head>
  <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
  <title>Modal Login Window Demo</title>
  <link rel="shortcut icon" href="http://designshack.net/favicon.ico">
  <link rel="icon" href="http://designshack.net/favicon.ico">
  <link rel="stylesheet" type="text/css" media="all" href="style.css">
  <script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>
  <script type="text/javascript" charset="utf-8" src="js/jquery.leanModal.min.js"></script>
  <!-- jQuery plugin leanModal under MIT License http://leanmodal.finelysliced.com.au/ -->
</head>

可喜的是我們不需要再包含任何默認CSS樣式表了,因為leanModal插件只提供了非常基本的JS功能,一切都被精簡下來,只剩光禿禿的模板。然而我們需要復制CSS板塊來實現黑暗覆蓋效果。下面是我從插件網站復制下來的用在默認樣式表中的代碼。

#lean_overlay {
    position: fixed;
    z-index:100;
    top: 0px;
    left: 0px;
    height:100%;
    width:100%;
    background: #000;
    display: none;
}

覆蓋區域將在頁面頂部以100%的高度和寬度出現,jQuery鎖定目標模態div,出現在HTML最前面。需要注意的是,我的body內容相當空,唯一重要的元素是用於顯示模態窗口的切換按鈕。我們來看看HTML表單#loginmodal div編碼段。

<div id="loginmodal" style="display:none;">
  <h1>User Login</h1>
  <form id="loginform" name="loginform" method="post" action="index.html">
    <label for="username">Username:</label>
    <input type="text" name="username" id="username" class="txtfield" tabindex="1">
     
    <label for="password">Password:</label>
    <input type="password" name="password" id="password" class="txtfield" tabindex="2">
     
    <div class="center"><input type="submit" name="loginbtn" id="loginbtn" class="flatbtn-blu hidemodal" value="Log In" tabindex="3"></div>
  </form>
</div>

注意,我已經包括:none; 作為一個單一的內聯CSS屬性。我們需要強制這個div沒有顯示,然后leanModal()可以使其在頁面褪色,並顯示為一個板塊元素。我使用的是非常簡單的類似CSS checkout form, 淺藍色的設計匹配較暗的陰影覆蓋,加上輸入字段上,我們可以利用CSS3過渡效果。另一個重要的頁面元素是“提交”按鈕。因為這種形式將不發送任何數據到 服務器,當用戶提交的時候,我們只是想隱藏模態窗口。我添加了類.hidemodal,可以設置內部jQuery方法。它將停止默認表單提交這個模態窗 口,並顯示為一個純粹美觀的效果。  

CSS布局風格

我的CSS文件包含了所有需要的典型頁面重置,以及一些排版和按鈕樣式。中心的登陸模態窗口包含一個新的按鈕樣式,模仿的是其他平面設計。但其實沒有太多獨特的CSS屬性需要進一步解釋,你應該能夠構建自己的模態窗口樣式。

/** page structure **/
#w {
  display: block;
  width: 750px;
  margin: 0 auto;
  padding-top: 30px;
}
 
#content {
  display: block;
  width: 100%;
  background: #fff;
  padding: 25px 20px;
  padding-bottom: 35px;
  -webkit-box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 2px 0px;
  -moz-box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 2px 0px;
  box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 2px 0px;
}
 
/** custom login button **/
.flatbtn-blu { 
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  display: inline-block;
  outline: 0;
  border: 0;
  color: #edf4f9;
  text-decoration: none;
  background-color: #4f94cf;
  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
  font-size: 1.3em;
  font-weight: bold;
  padding: 12px 26px 12px 26px;
  line-height: normal;
  text-align: center;
  vertical-align: middle;
  cursor: pointer;
  text-transform: uppercase;
  text-shadow: 0 1px 0 rgba(0,0,0,0.3);
  -webkit-border-radius: 3px;
  -moz-border-radius: 3px;
  border-radius: 3px;
  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
  -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
}
.flatbtn-blu:hover {
  color: #fff;
  background-color: #519dde;
}
.flatbtn-blu:active {
  -webkit-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1);
  -moz-box-shadow:inset 0 1px 5px rgba(0, 0, 0, 0.1);
  box-shadow:inset 0 1px 5px rgba(0, 0, 0, 0.1);
}

我認為需要掌握的關鍵要素是疊加效應和模態窗口的容器,我把這些移動到樣式表的底部了,與其他所有的模態窗口屬性分為一組。並限制了 模態窗口寬度為300px,因為這個示例只能有2個輸入。但是請記住,leanModal不會強迫任何默認樣式到你的窗口,所以你可以100%的自主設 計。

/** modal window styles **/
#lean_overlay {
    position: fixed;
    z-index:100;
    top: 0px;
    left: 0px;
    height:100%;
    width:100%;
    background: #000;
    display: none;
}
 
#loginmodal {
  width: 300px;
  padding: 15px 20px;
  background: #f3f6fa;
  -webkit-border-radius: 6px;
  -moz-border-radius: 6px;
  border-radius: 6px;
  -webkit-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.5);
  -moz-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.5);
  box-shadow: 0 1px 5px rgba(0, 0, 0, 0.5);
}
 
#loginform { /* no default styles */ }
 
#loginform label { display: block; font-size: 1.1em; font-weight: bold; color: #7c8291; margin-bottom: 3px; }
 
.txtfield { 
  display: block;
  width: 100%;
  padding: 6px 5px;
  margin-bottom: 15px;
  font-family: 'Helvetica Neue', Helvetica, Verdana, sans-serif;
  color: #7988a3;
  font-size: 1.4em;
  text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.8);
  background-color: #fff;
  background-image: -webkit-gradient(linear, left top, left bottom, from(#edf3f9), to(#fff));
  background-image: -webkit-linear-gradient(top, #edf3f9, #fff);
  background-image: -moz-linear-gradient(top, #edf3f9, #fff);
  background-image: -ms-linear-gradient(top, #edf3f9, #fff);
  background-image: -o-linear-gradient(top, #edf3f9, #fff);
  background-image: linear-gradient(top, #edf3f9, #fff);
  border: 1px solid;
  border-color: #abbce8 #c3cae0 #b9c8ef;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  border-radius: 4px;
  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.25), 0 1px rgba(255, 255, 255, 0.4);
  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.25), 0 1px rgba(255, 255, 255, 0.4);
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.25), 0 1px rgba(255, 255, 255, 0.4);
  -webkit-transition: all 0.25s linear;
  -moz-transition: all 0.25s linear;
  transition: all 0.25s linear;
}
 
.txtfield:focus {
  outline: none;
  color: #525864;
  border-color: #84c0ee;
  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15), 0 0 7px #96c7ec;
  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15), 0 0 7px #96c7ec;
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15), 0 0 7px #96c7ec;
}

每個文本字段的邊框和框陰影都有過渡動畫效果,在兩個輸入之間文字的顏色也將消失。我選擇了淡藍色的配色方案和與輸入字段匹配的按鈕效果。還有許多其他提供前綴CSS3屬性,所以這種形式更適合於新的渲染引擎。但它只能在主流瀏覽器上正確的顯示與渲染。

jQuery模態效果

不 幸運的是我們無法通過點擊事件靠着CSS3來實現隱藏/顯示不同的窗口,而且毫無可能性。通過shadowbox效果,就更容易在JavaScript中 達到模態窗口效果。幸好leanModal插件只需要一行JS就能激活,我把以下代碼塊放在結束用的</body>標簽之前了。

$(function(){
  $('#loginform').submit(function(e){
    return false;
  });

第一小段代碼塊的作用是用戶按下“登陸”,就嘗試提交表單。我們使用JavaScript關鍵字返回false來停止事件。你可以在Stack Overflow上閱讀更多有關此方法的文章。最后一行是我們非常需要的模態窗口工作代碼。

  $('#modaltrigger').leanModal({ top: 110, overlay: 0.45, closeButton: ".hidemodal" });
});

如果我們不自定義任何參數,$(‘#modaltrigger’).leanModal()也能很好的運行。不過在演示中我展 示了3個可選變量你可以適用於函數中。首先設置窗口頂部的偏移值,然后背景透明度級別標記在0.0-1.0之間。最后附加一個新的jQuery選擇器來關 閉按鈕。這可以是一個類或ID,或某些組合,包括HTML屬性選擇器。在我的示例中,補充到登陸按鈕都使用的是相同的類.hidemodal,如此一來, 每次按下“提交”按鈕,模態窗口就會隱藏起來。 

為了使表單實際生效,你需要從按鈕中刪除這個類,以及刪除leanModal()函數之前的JavaScript代碼塊。結果是將用戶重定向到一個新的頁面。你可以多多運用不同的方法,檢驗模態呈現的最好方式是哪一種。

在線演示——下載源代碼

使用jQuery創建模態窗口登陸效果

結語

模 態窗口效果可以用在更多的情況下,不僅僅是登錄表單。你需要考慮各種UI元素的網頁,並考慮哪些元素在自己的窗口中可能更有用。這涉及到特殊形式或更長的 詳細內容,可能不是每個人都喜歡。請大家看看我的在線示例演示,看看我們如何能夠使用標准的HTML塊實現這個leanModal jQuery效果。任何人對於CSS有一些基本的了解就不難理解我的默認樣式設計。此功能有這么多的用途,其中不乏想象力。但我真的希望這些示例教程代碼 可能會給開發者提供標准模板,以節省時間。

via 極客標簽

來源:使用jQuery創建模態窗口登陸效果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM