• Python之Web前端jQuery扩展


      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

         

      

       

  • 相关阅读:
    初识Django-前后端不分离(一)
    虚拟环境的搭建
    python+request+Excel做接口自动化测试(二)
    使用postman+newman+python做接口自动化测试
    如何处理接口响应结果分析
    request使用的封装
    python中unittest的使用
    使用python的接口测试环境搭建及使用
    关于测试流程的指导心得
    Redis 学习
  • 原文地址:https://www.cnblogs.com/python-nameless/p/5819176.html
Copyright © 2020-2023  润新知