首页 > 技术文章 > Python之Web前端jQuery扩展

python-nameless 2016-08-29 18:48 原文

 

  Python之Web前端:

        一. jQuery表单验证

        二. jQuery扩展

        三. 滚动菜单

 

一. jQuery表单验证:

    任何可以交互的站点都有输入表单,只要有可能,就应该对用户输入的数据进行验证。无论服务器后端是什么样的系统,都不愿意把时间浪费在一些无效的信息上,必须对表单数据进行校验,若有不符合规定的表单输入,应及时返回并给出相应的提示信息。

    1. 表单验证的提示主要有两种实现方式:

      (1)浏览器端验证: 

        通过浏览器的JavaScript验证,由于不需要和服务器交互,加快了响应信息的速度,提高了用户的体验,但是可能会有浏览器兼容性问题。

          浏览器端验证原理图

 

      (2)服务器端验证:

        客户端提交表单到服务器端,服务器端验证通过时则返回表单信息到客户端,需要不断的与客户端交互,大大增加了服务性能和客户体验的问题。

            服务器端验证原理图

     (3)浏览器端和服务器端的双重验证:

      在浏览器端验证的基础上增加服务器端的验证,这样既解决了用户的体验,也解决了浏览器兼容性的问题。

           浏览器端和服务器端双重验证原理图

 

  2. 表单验证的基本原理:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>表单验证的基本原理</title>
 6 </head>
 7 <body>
 8     <!--表单验证的基本原理-->
 9     <form>
10         <input type="submit" onclick="check()">
11     </form>
12     <script>
13     function check(){
14         //进行用户输入内容的验证
15         //获取from表单中所有的input,逐个检测
16 
17         //继续事件的执行 return true
18         //终止后续事件   return false
19     }
20     </script>
21 </body>
22 </html>

  3. 表单验证

    Dom绑定验证

    jQuery绑定验证

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>表单验证DOM</title>
 6      <style>
 7         .item{
 8             width: 250px;
 9             height: 60px;
10             position: relative;
11         }
12         .item input{
13             width: 200px;
14         }
15         .item span{
16             position: absolute;
17             top: 20px;
18             left: 0px;
19             font-size: 8px;
20             background-color: indianred;
21             color: white;
22             display: inline-block;
23             width: 200px;
24         }
25     </style>
26 
27 </head>
28 <body>
29     <div>
30         <form>
31             <div class="item">
32                 <input class="c1" type="text" name="username" label="用户名"/>
33                 <!--<span>用户名不能为空</span>-->
34             </div>
35             <div class="item">
36                 <input  class="c1" type="password" name="pwd" label="密码"/>
37                 <!--<span>密码不能为空</span>-->
38             </div>
39             <input type="submit" value="提交" onclick="return CheckValid();" />
40         </form>
41     </div>
42     <script src="博客/jquery-1.12.4.js"></script>
43     <script>
44         function CheckValid() {
45             // 找到form标签下的所有需要验证的标签
46             // $('form .cl') 查找form标签下的cl类
47             // $('form input[type="text"],form input[type="text"]') 查找form标签下的input标签type等于text或者password的标签
48 
49             $('form .item span').remove();//默认将所有span标签移除
50             var flag = true;//定义全局变量
51             //循环所有需要验证的标签,获取内容。
52             $('form .c1').each(function () {
53                 // 每个元素执行一次匿名函数
54                 // this:循环当前的元素
55                 // console.log(this,$(this))
56                 var val = $(this).val();//获取当前标签内容
57                 if(val.length<=0){ //判断当前标签内容长度
58                     var lable = $(this).attr('label');//定义变量获取当前标签的属性执行,这里为label属性。
59                     var tag = document.createElement('span');//定义变量创建span标签
60                     tag.innerText = lable + "不能为空";//获取tag(span)的文本值变量
61                     $(this).after(tag);  // 将添加的span标签通过after的方式添加到input的下面
62                     flag = false;//结束当前循环
63                 }
64             });
65             return flag;
66         }
67     </script>
68 </body>
69 </html>
Dom绑定验证
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>表单验证jQuery</title>
 6     <style>
 7         .item{
 8             width: 250px;
 9             height: 60px;
10             position: relative;
11         }
12         .item input{
13             width: 200px;
14         }
15         .item span{
16             position: absolute;
17             top: 20px;
18             left: 0px;
19             font-size: 8px;
20             background-color: indianred;
21             color: white;
22             display: inline-block;
23             width: 200px;
24         }
25     </style>
26 
27 </head>
28 <body>
29     <div>
30         <form>
31             <div class="item">
32                 <input class="c1" type="text" name="username" label="用户名"/>
33                 <!--<span>用户名不能为空</span>-->
34             </div>
35             <div class="item">
36                 <input  class="c1" type="password" name="pwd" label="密码"/>
37                 <!--<span>密码不能为空</span>-->
38             </div>
39             <input type="submit" value="提交">
40         </form>
41     </div>
42     <script src="博客/jquery-1.12.4.js"></script>
43     <script>
44         $(function () {
45             BindCheckValid();
46             //当页面框架加载完成之后,自动执行。
47         });
48         
49         function BindCheckValid() {
50             $('form :submit').click(function () {//点击submit时触发click事件
51                 var flag = true;//定义全局变量
52 
53                 $('form .item span').remove();//默认将所有span标签移除
54                 //循环所有需要验证的标签,获取内容。
55                 $('form .c1').each(function () {
56                     // 每个元素执行一次匿名函数
57                     // this:循环当前的元素
58                     // console.log(this,$(this))
59                     var val = $(this).val();//获取当前标签内容
60                     if (val.length <= 0) {//判断当前标签内容长度
61                         var label = $(this).attr('label');//定义变量获取当前标签的属性执行,这里为label属性。
62                         var tag = document.createElement('span');//定义变量创建span标签
63                         tag.innerText = label + '不能为空';//获取tag(span)的文本值变量
64                         $(this).after(tag);// 将添加的span标签通过after的方式添加到input的下面
65                         flag = false;//结束当前循环
66                         return false;//终止所有循环,相当于break.及用户名不通过则不再验证密码。
67 
68                     }
69                 });
70                 return flag;
71             })
72         }
73 
74     </script>
75 </body>
76 </html>
jQuery绑定验证

注: 一般都是用jQuery绑定验证,封装在js里,这样在浏览器就看不到具体的绑定方法了。

 

二. jQuery扩展

   jQuery.extend(project): jQuery类级别的插件,相当于添加静态方法

   jQuery.fn.extend(project): 添加jQuery对象级的插件,是给jQuery类添加方法

 1 //extend书写方法:
 2 
 3 ;(function($){  
 4     $.extend({  
 5         "函数名":function(自定义参数){  
 6             //这里写插件代码  
 7         }  
 8     });  
 9 })(jQuery);  
10 或者  
11 ;(function($){  
12     $.函数名=function(自定义参数){  
13         //这里写插件代码  
14     }  
15 })(jQuery);  
16 
17 //调用方法: $.函数名(参数);
 1 //fn.extend书写方法:
 2 
 3 ;(function($){  
 4     $.fn.extend({  
 5         "函数名":function(自定义参数){  
 6             //这里写插件代码  
 7         }  
 8     });  
 9 })(jQuery);  
10 或者  
11 ;(function($){  
12     $.fn.函数名=function(自定义参数){  
13         //这里写插件代码  
14     }  
15 })(jQuery);  
16 
17 //调用方法: $("#id").函数名(参数);

为了让我们的插件足够通用,我们需要把一些配置留给用户自己定义,通用的做法是使用一个对象来承载所有的设置项,并给他们默认值。

1 var defaults = {
2      msg1: "hello1",
3      msg2: "hello2"
4 }

然后我们给我们的插件函数加上参数:

 1 ;(function($) {
 2     var defaults = {
 3     msg1: "hello1",
 4     msg2: "hello2"
 5     };
 6 
 7     $.NPScrollLoad = function(options) {
 8         var opts = $.extend(defaults, options);
 9         alert(opts.msg1 + opts.msg2);
10     };
11 
12 }) (jQuery);
13 
14 //调用结果: 
15 //$.NPScrollLoad({msg1 : "你好"});
16 //$.NPScrollLoad({msg1 : "你好", msg2 : "呵呵"});
17 //$.NPScrollLoad({msg2 : "......"});
18 //$.NPScrollLoad();

 注: 没有赋值的属性会使用defaults里面定义的默认值,赋值的属性则会覆盖defaults中相应的属性。

 

JavaScript拾遗之正则表达式:

点击访问

 

三. 滚动菜单

       1.页面布局CSS(absolute,fixd)

         position: absolute :生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。

         position: fixd :生成绝对定位的元素,相对于浏览器窗口进行定位。 

       2.监听滚动事件JavaScript:

        如果滚动>50(举例),菜单固定

        如果滚动<50(举例),菜单固定取消

 

  1 <!DOCTYPE html>
  2 <html>
  3 <head lang="en">
  4     <meta charset="UTF-8">
  5     <title></title>
  6     <style>
  7 
  8         body{
  9             margin: 0px;
 10         }
 11         img {
 12             border: 0;
 13         }
 14         ul{
 15             padding: 0;
 16             margin: 0;
 17             list-style: none;
 18         }
 19         .clearfix:after {
 20             content: ".";
 21             display: block;
 22             height: 0;
 23             clear: both;
 24             visibility: hidden;
 25         }
 26 
 27         .wrap{
 28             width: 980px;
 29             margin: 0 auto;
 30         }
 31         
 32         .pg-header{
 33             background-color: #303a40;
 34             -webkit-box-shadow: 0 2px 5px rgba(0,0,0,.2);
 35             -moz-box-shadow: 0 2px 5px rgba(0,0,0,.2);
 36             box-shadow: 0 2px 5px rgba(0,0,0,.2);
 37         }
 38         .pg-header .logo{
 39             float: left;
 40             padding:5px 10px 5px 0px;
 41         }
 42         .pg-header .logo img{
 43             vertical-align: middle;
 44             width: 110px;
 45             height: 40px;
 46 
 47         }
 48         .pg-header .nav{
 49             line-height: 50px;
 50         }
 51         .pg-header .nav ul li{
 52             float: left;
 53         }
 54         .pg-header .nav ul li a{
 55             display: block;
 56             color: #ccc;
 57             padding: 0 20px;
 58             text-decoration: none;
 59             font-size: 14px;
 60         }
 61         .pg-header .nav ul li a:hover{
 62             color: #fff;
 63             background-color: #425a66;
 64         }
 65         .pg-body{
 66 
 67         }
 68         .pg-body .catalog{
 69             position: absolute;
 70             top:60px;
 71             width: 200px;
 72             background-color: #fafafa;
 73             bottom: 0px;
 74         }
 75         .pg-body .catalog.fixed{
 76             position: fixed;
 77             top:10px;
 78         }
 79 
 80         .pg-body .catalog .catalog-item.active{
 81             color: #fff;
 82             background-color: #425a66;
 83         }
 84 
 85         .pg-body .content{
 86             position: absolute;
 87             top:60px;
 88             width: 700px;
 89             margin-left: 210px;
 90             background-color: #fafafa;
 91             overflow: auto;
 92         }
 93         .pg-body .content .section{
 94             height: 500px;
 95         }
 96     </style>
 97 </head>
 98 <body>
 99 
100     <div class="pg-header">
101         <div class="wrap clearfix">
102             <div class="logo">
103                 <a href="#">
104                     <img src="">
105                 </a>
106             </div>
107             <div class="nav">
108                 <ul>
109                     <li>
110                         <a  href="#">首页</a>
111                     </li>
112                     <li>
113                         <a  href="#">功能一</a>
114                     </li>
115                     <li>
116                         <a  href="#">功能二</a>
117                     </li>
118                 </ul>
119             </div>
120 
121         </div>
122     </div>
123     <div class="pg-body">
124         <div class="wrap">
125             <div class="catalog">
126                 <div class="catalog-item" auto-to="function1"><a>第1张</a></div>
127                 <div class="catalog-item" auto-to="function2"><a>第2张</a></div>
128                 <div class="catalog-item" auto-to="function3"><a>第3张</a></div>
129             </div>
130             <div class="content">
131                 <div menu="function1" class="section">
132                     <h1>第一章</h1>
133                 </div>
134                 <div menu="function2" class="section">
135                     <h1>第二章</h1>
136                 </div>
137                 <div menu="function3" class="section">
138                     <h1>第三章</h1>
139                 </div>
140             </div>
141         </div>
142 
143     </div>
144 
145     <script type="text/javascript" src="jquery-1.8.2.min.js"></script>
146     <script type="text/javascript">
147         $(function(){
148             //自动执行
149             Init();
150         });
151         function Init(){
152 
153             $(window).scroll(function() {
154                 //监听窗口的滚动时间
155 
156                 // 获取滚动条高度
157                 var scrollTop = $(window).scrollTop();
158                 if(scrollTop > 50){
159                 //滚动到50像素时,左侧菜单添加fixed标签固定
160                     $('.catalog').addClass('fixed');
161                 }else{
162                     $('.catalog').children().removeClass('active');
163                     $('.catalog').removeClass('fixed');//否则移除固定
164                 }
165 
166                 // 循环所有的内容
167                 $('.content').children().each(function(){
168                     // 当前标签距离顶部高度
169                     var offSet = $(this).offset();//高度,左边有多远。
170 
171                     // 当前内容高度 - 滚动高度,如果滚动到内容一时,此值为0;
172                     var offTop = offSet.top - scrollTop;
173                     // 自身高度
174                     var height = $(this).height();
175 
176                     // 当前内容位于用户阅览区
177                     if(offTop<=0 && offTop> -height){
178 
179                         var docHeight = $(document).height();
180                         var winHeight = $(window).height();
181                         // 如果,滚轮到达底部,则显示最后一个菜单
182                         if(docHeight == winHeight+scrollTop)
183                         {
184                             $('.catalog').find('div:last-child').addClass('active').siblings().removeClass('active');
185                         }else{
186                             var target = $(this).attr('menu');
187                             $('.catalog').find('div[auto-to="'+target+'"]').addClass('active').siblings().removeClass('active');
188                         }
189                         return false;
190                     }
191                 });
192 
193             });
194 
195 
196         }
197 
198     </script>
199 </body>
200 </html>
滚动菜单示例

 

其他内容:

    常用前端插件

      1. fontawsome: 制作图标

      2. easyUI/jQueryUI: 多用于做后台管理

      3. bootstrap

        --引入CSS

        --引入jQuery(版本必须使用2.X,1.12)

        --引入JavaScript

注: easyUI,jQuery, bootstrap都需要引入以上三条。

        -- bootstrap模板

      4. bxslider: 滑动插件

      5. jQuery.lazyload: 延迟加载插件


 

参考手册: http://www.w3school.com.cn/b.asp

     

  

   

 

推荐阅读