ASP.NET Web应用系统开发(C#)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.5 前端插件与框架

通过学习上述知识,我们不难发现,利用原生的JavaScript语言操作时,过程较为复杂,尤其是当涉及DOM操作、改变样式、内容提交等方面时更复杂。为了简化JavaScript语言的使用流程,提高编程效率、提升程序的性能,JavaScript语言衍生出了许多插件与框架。本节将着重介绍jQuery、Bootstrap和Vue.js三种前端框架。

1.5.1 jQuery

jQuery是一个快速、简洁的JavaScript框架,其设计哲学是倡导写更少的代码做更多的事情。jQuery的核心特性为:具有独特的链式语法和短小清晰的多功能接口;具有高效灵活的选择器;大大简化了Ajax技术的应用过程;拥有便捷的插件扩展机制和丰富的插件,并且具有较好的浏览器兼容性。目前最新的版本是jQuery3.3.1。

默认情况下,jQuery的程序代码是待网页中DOM结构加载完毕后执行,类似于将程序放在原生JavaScript中的onload事件中。

在页面中需要首先通过<script src="">标签将jQuery文件引入进来(jQuery下载地址:http://jquery.com/download/),之后才能进行基于jQuery的编程。另外,jQuery程序必须放在以下结构中:

    $(document). ready(function(){
      你的jQuery程序。
    });
    可简写为:
    $(function(){
      你的jQuery程序。
    })

1.5.1.1 jQuery选择器

与CSS中的选择器的作用类似,jQuery中选择器的作用也是确定操作对象。jQuery中选择器的具体写法与CSS中选择器的写法基本一致,但是丰富了许多新的写法。jQuery选择器必须放在$()中。如:

$("div"):选择所有<div>标签。

$("#abc"):选择id属性值为abc的标签。

$(". def"):选择class属性值为def的所有标签。

$("input [type=′text′]"):选择type属性值为text的所有<input>标签。

1.5.1.2 对象的属性与方法

我们利用选择器确定了对象后,可以通过丰富的属性与方法对对象进行多种操作。常用的属性与方法有:

.text(); //获取或设置非表单标签内容,如果内容中有html代码,不解析,原样显示。

.html(); //获取或设置非表单标签内容,如果内容中有html代码,解析显示。

.val(); //获取或设置表单标签的值。

.prop(); //获取或设置标签的固有属性值。

.append(); //在操作对象内添加内容。

.remove(); //删除对象。

.empty(); //删除对象中所有子标签。

.css(); //获取或设置标签的css样式。

.addClass(); //为对象添加一种类样式。

.removeClass(); //为对象删除一种类样式。

.width(); //获取或设置标签的宽度。

.height(); //获取或设置标签的高度。

.hide(); //隐藏对象。

.show(); //显示对象。

.toggle(); //在hide()和show()之间自动切换。

fadeIn(); //淡入。

fadeOut(); //淡出。

.fadeToggle(); //在fadeIn()和fadeOut()之间自动切换。

slideDown(); //滑动出现。

slideUp(); //滑动隐藏。

.slideToggle(); //在slideDown()和slideUp()之间自动切换。

.attr(); //获取或设置标签的自定义属性值。

1.5.1.3 jQuery事件

jQuery重新定义了事件的创建应用方法,实现过程更为简化。其基本结构为:

    $("选择器名"). 事件名(function(){
      代码;
    })

我们仍以上述简单表单验证为例,来了解一下该事件在jQuery中的实现过程。

    <script src="https://unpkg.com/jquery@3.3.1/dist/jquery.min.js"></script>
        <script>
            $(function(){
                $("#submitBtn"). click(function(){
                  var username = $("#username"). val();
                  if(username == ""){
                      alert("内容不能为空");
                  }
                  else if(username. length < 6){
                      alert("内容长度不能少于6位")
                  }
                  else if(username. length > 15){
                      alert("内容长度不能多于15位");
                  }
                  else {
                      alert("通过");
                      $("#myForm"). submit();
                  }
              })
          })
        </script>
        <form action="http://www.xynun.edu.cn" method="get" id="myForm">
            <input type="text" name="" id="username">
            <input type="button" value="提交" id="submitBtn">
        </form>

1.5.1.4 jQuery中的Ajax技术

Ajax(Asynchronous Javascript And XML,异步JavaScript和XML)是一种创建交互式网页应用的网页开发技术,可用于创建快速动态网页,在无须重新加载整个网页的情况下,能够更新部分网页,其本质就是实现异步加载。利用原生JavaScript实现Ajax的过程十分复杂,而jQuery则大大简化了其实现过程,提升了Web开发中前端与后端进行异步数据交换的效率。jQuery内置十多种Ajax函数,常用的有ajax()、getJSON()、post()和load()等,下面逐一介绍。

①$.ajax()。

这是最为完整的执行异步Ajax请求的函数,其核心参数包括:

    $.ajax({
        url:url; // 请求对象字符串,即后端程序页面的url
        data:data; //附加的请求参数(JSON格式)
        type:"get/post"; //请求类型
      dataType:"json/text/html/xm等"; //请求返回值的类型
        success:function(data){}; //请求成功后的回调函数,函数的参数data为后端
    程序的返回值
    });
      由于$.ajax()函数的参数为标准的JSON格式,因此参数不分先后顺序。如:
    $(function(){
        $.ajax({
          url:"src/index. cs",
          data:{act:"ajax"},
          type:"get",
          dataType:"json",
          success:function(data){
              $("#div1").html(data)
          }
        })

上述示例的效果是异步从后端src/index.cs页面获取JSON数据,并显示到当前页面的id为div1的标签中。此时要求后端程序的返回值必须为JSON格式,否则前端将不能识别解析。

②$.getJSON()。

$.getJSON()方法实际上是简化的$.ajax()方法之一,它相当于在$.ajax()中将参数type设为get、dataType设为json。如:

    $(function(){
        $.getJSON("src/index. cs", {act:"ajax"}, function(data){
              $("#div1").html(data)
          }
        })

要注意,由于$.getJSON()函数的参数不是标签的JSON格式,因此参数顺序不能随意写,只能按照示例中的顺序来写。

③$.post()。

$.post()方法实际上是简化的$.ajax()方法之一,它相当于在$.ajax()中将参数type设为post,通常用于向服务器后端程序提交表单数据。其基本用法示例如下:

    $(function(){
        $.post("src/index. cs", {act:"ajax"}, function(data){
              $("#div1").html(data)
          }
        }, "json")

要注意,$.post()函数有四个基本参数,前三个参数与$.getJSON()函数中的参数相同,第四个参数实际上相当于$.ajax()函数中的dataType参数,即指定后端程序返回值的类型。$.post()函数的参数顺序也是固定的。

④load(url)。

load()方法是简单但强大的AJAX方法,它可从服务器加载数据,并把返回的数据放入HTML元素中。如$("#div1"). load("demo_test. txt")。

1.5.2 Bootstrap

在Web前端设计领域,如何快速搭建风格统一、布局合理且能够自动适应不同用户设备的页面一直是一个重要问题,以往设计人员通常是将HTML5、CSS3和JavaScript等技术综合起来解决这一问题的,实现过程复杂,在团体开发中难以保证统一性,而且代码的复用性也不够理想。基于jQuery的Bootstrap框架正是为了解决上述问题而诞生的,它是最受欢迎的HTML、CSS和JavaScript框架之一,用于开发响应式布局、移动设备优先的WEB项目。其本质是定义了风格统一的、几乎覆盖前端开发涉及的所有领域的网格布局、基本样式、布局组件、插件等,供前端开发人员根据需要直接选用。目前的最新版本是Bootstrap4.2.1。

在使用Bootstrap时,我们需要先引入jQuery文件,然后再引入Bootstrap的.js文件和.css样式文件。

由于Bootstrap包含内容较多,限于篇幅本节仅介绍部分功能,读者可通过其他途径学习掌握更多相关知识。

1.5.2.1 网格布局

Bootstrap提供了一套响应式、移动设备优先的流式网格系统,它将页面在水平方向上最多分为12列,允许开发人员设置某一标签在某种窗口宽度下占几列。我们结合一个具体需求案例来介绍其实现过程。

目标:页面中有6个<div>标签,在宽屏模式下每行显示3个<div>,共2行;在中等宽度模式下每行显示2个<div>,共3行;在窄屏模式下,每个<div>独立占一行,共6行。

    代码:
        <div class="container">
            <div class="row">
              <div class="col-lg-4 col-md-6 col-sm-12 col-xs-12">1</div>
              <div class="col-lg-4 col-md-6 col-sm-12 col-xs-12">2</div>
              <div class="col-lg-4 col-md-6 col-sm-12 col-xs-12">3</div>
              <div class="col-lg-4 col-md-6 col-sm-12 col-xs-12">4</div>
              <div class="col-lg-4 col-md-6 col-sm-12 col-xs-12">5</div>
              <div class="col-lg-4 col-md-6 col-sm-12 col-xs-12">6</div>
          </div>
      </div>

上述示例中,. container类提供一个最基本的布局容器,在网络布局中不可缺少;.row类定义一个占满一行的块级标签,而其包含的子标签就是可以自适应布局的最小网络单元(又被称为栅格)。在这些网络单元中,系统提供了在四种不同屏幕尺寸下的显示方式,具体如下:

col-lg-*:指当前标签在大屏幕中占一行12列中的*列。

col-md-*:指当前标签在中午屏幕中占一行12列中的*列。

col-sm-*:指当前标签在小屏幕中占一行12列中的*列。

col-xs-*:指当前标签在超小屏幕中占一行12列中的*列。

开发人员可根据实际需求,灵活设置对应的数值,从而实现响应式布局。

1.5.2.2 常用的基本类样式

常用的基本类样式见表1.11

表1.11 常用的基本类样式

在使用上述类样式时,直接将样式名写入标签的class属性即可,同一标签可以根据需要同时设置多个类样式,比如:<div class="bg-dark text-white text-center font-weight-bold ">兴义民族师范学院</div>。

1.5.2.3 布局组件

组件可理解为由多个标签组成的功能较为简单的代码块。Bootstrap内置了大量的组件,开发人员稍加修改即可使用。

例1:面包屑导航。

    <nav aria-label="breadcrumb">
        <ol class="breadcrumb">
            <li class="breadcrumb-item"><a href="#">首页</a></li>
            <li class="breadcrumb-item"><a href="#">新闻中心</a></li>
            <li class="breadcrumb-item active" aria-current="page">新闻列表</li>
        </ol>
    </nav>

例2:卡片。

    <div class="card" style="width:1rem; ">
        <img class="card-img-top" src=". . . ">
        <div class="card-body">
            <h5 class="card-title">卡片标题</h5>
            <p class="card-text">卡片内容</p>
        </div>
    </div>

例3:列表组。

    <ul class="list-group">
        <li class="list-group-item">教务处</li>
        <li class="list-group-item">人事处</li>
      <li class="list-group-item">信息技术学院</li>
  </ul>

例4:响应式表单布局。

    <div class="input-group mb-3">
        <div class="input-group-prepend">
            <span class="input-group-text">账号</span>
        </div>
        <input type="text" class="form-control" placeholder="账号可为用户名或电话。"/>
    </div>
    <div class="input-group mb-3">
        <div class="input-group-prepend">
            <span class="input-group-text">密码</span>
        </div>
        <input type="password" placeholder="登录密码。" class="form-control"/>
    </div>
    <div class="text-center">
    <button class="btn btn-primary" >登录</button>    <button class="btn">
    重置</button>
    </div>

例5:下拉菜单。

    <div class="dropdown">
        <button type="button" class="btn dropdown-toggle" id="dropdownMenu1" data-
    toggle="dropdown">主题<span class="caret"></span></button>
        <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1">
            <li role="presentation"><a role="menuitem" tabindex="-1" href="#">数据挖
    掘</a></li>
            <li role="presentation"><a role="menuitem" tabindex="-1" href="#">数据通
    信/网络</a></li>
            <li role="presentation" class="divider"></li>
            <li role="presentation"><a role="menuitem" tabindex="-1" href="#">分离的
    链接</a></li>
        </ul>
    </div>

1.5.2.4 插件

Bootstrap中的插件用于实现一些相对复杂的功能模块,在非Bootstrap环境下,这些功能的实现往往需要额外的JavaScript代码作支撑,但是借助Bootstrap插件其实现过程将大大简化。本节介绍Tab页、手风琴效果、轮播图和模态框功能的实现。

例1: Tab页(选项卡效果)。

    <ul id="myTab" class="nav nav-tabs">
      <li class="active"><a href="#home" data-toggle="tab">新闻</a></li>
      <li><a href="#ios" data-toggle="tab">通知</a></li>
  </ul>
  <div id="myTabContent" class="tab-content">
  <div class="tab-pane fade in active" id="home">
  <p>新闻列表</p>
      </div>
      <div class="tab-pane fade" id="ios">
          <p>通知列表</p>
      </div>
  </div>

例2:手风琴效果。

    <div class="panel-group" id="panel-1">
    <div class="panel panel-default">
            <div class="panel-heading">
            <a class="panel-title" data-toggle="collapse" data-parent="#panel-1" href=
    "#panel-element-1">系统管理</a>
        </div>
            <div id="panel-element-1" class="panel-collapse in">
              <div class="panel-body">关键参数设置</div>
              <div class="panel-body">用户角色管理</div>
            </div>
        </div>
        <div class="panel panel-default">
    <div class="panel-heading">
            <a class =" panel-title collapsed" data-toggle =" collapse" data-parent =
    "#panel-1" href="#panel-element-2">新闻管理</a>
        </div>
        <div id="panel-element-2" class="panel-collapse collapse">
              <div class="panel-body">新闻栏目管理</div>
              <div class="panel-body">新闻内容管理</div>
    </div>
    </div>
    </div>

例3:轮播图。

    <div class="carousel slide" data-ride="carousel">
        <ul class="carousel-indicators"><! --指示符 -->
            <li data-target="#demo" data-slide-to="0" class="active"></li>
            <li data-target="#demo" data-slide-to="1"></li>
      </ul>
      <div class="carousel-inner"><! --轮播图片 -->
          <div class="carousel-item active">
              <img class="img-fluid" src="img/default1.jpg">
          </div>
          <div class="carousel-item">
              <img class="img-fluid" src="img/default2.jpg">
          </div>
      </div>
      <! --左右切换按钮 -->
      <a class="carousel-control-prev" href="#demo" data-slide="prev">
          <span class="carousel-control-prev-icon"></span>
      </a>
      <a class="carousel-control-next" href="#demo" data-slide="next">
          <span class="carousel-control-next-icon"></span>
      </a>
  </div>

例4:模态框(全屏弹窗)。

    <button type="button" class="btn btn-primary"data-toggle="modal" data-target=
    "#myModal">
        打开全屏窗口
    </button>
    <! --模态框 -->
    <div class="modal fade" id="myModal">
        <div class="modal-dialog modal-lg">
            <div class="modal-content">
              <div class="modal-header">
                  <h4 class="modal-title">头部</h4>
                    <button type="button" class="close" data-dismiss="modal" >
    × </button>
              </div>
              <div class="modal-body">
                  主体内容
              </div>
              <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-dismiss=
    "modal">关闭</button>
              </div>
            </div>
      </div>
  </div>

此例中,除了在按钮中设置"data-toggle=′modal′ data-target=′#myModal′ "来实现点击之后出现弹窗外,还可以使用JavaScript代码来手动控制弹窗的开关,具体如下:

    $(function(){
        $("#btn"). click(function(){
            $("#myModal"). modal("show/hide"); //show表示出现弹窗,hide表示
    关闭弹窗
        })
    })