jQuery模拟在线选座

看了很多关于在线选座的例子,很多都引入了选座插件,而我将要介绍的是不用插件实现的选座功能

首先来看一下效果图
这里写图片描述

分析结构 可以把html部分分为四大部分 。后两部分采用固定定位的方式,将其固定在底部

jQuery部分写了两个方法,记录用户的操作

    function removeArr(key) {
            for(var i=0;i<htmArr.length;i++){
                if(htmArr[i]==key){
                    htmArr.splice(i,1);//移除第i个元素
                }
            }
        }
        function addArr() {
            var thisHtml = "";
            for(var i=0;i<htmArr.length;i++){
                thisHtml+="<li>"+htmArr[i]+"</li>"
            }
            $(".adds ul").html(thisHtml);
        }

具体实现如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            margin: 0;
            padding: 0;
            list-style: none;
        }
        body{
            background: #0f0f0f;
        }
        .container{
            width: 750px;
            margin: 0 auto;
        }
        .h-date{
            background: #ffffff;
            font-size: 30px;
            height: 80px;
            line-height: 80px;
            text-align: center;
        }
        .h-sign{
            padding: 20px;
            border-bottom: 1px solid #999;
        }
        .h-sign span{
            width: 45px;
            height: 35px;
            color: #ffffff;
            display: inline-block;/*行级块元素 给没有内容的行级元素留出空间  因为行级元素的宽高由内容撑的*/
            font-size: 25px;
            vertical-align: middle;/*文本垂直居中 */
        }
        .h-sign span:nth-child(even){
            width: 75px;
        }
        .container .empty{
            background: #ffffff;
        }
        .container .selected{
            background: red;
        }
        .container .sold{
            background: blue;
        }
        .clear-fix::after{/*清除浮动*/
            content: "";
            clear: both;
            display: block;
        }
        .content{
            position: relative;
           /* min-height: 100%;*/
            border-bottom: 1px solid #999999;
        }
        .content li{
            background: #ffffff;
            width: 45px;
            height: 35px;
            float: left;
            margin: 20px 10px;
        }
        .content li:nth-child(6){
            margin-left:110px;
        }
        .s-bar{
            background: #333333;
            position: fixed;/*固定定位*/
            height: 100px;
            bottom: 80px;
            width: 750px;
        }
        .text{
            margin: 5px 5px;
        }
        .text span{
            color: #ffffff;
            font-size: 25px;
        }
        .text span:nth-child(1){
            float: left;
        }
        .text span:nth-child(2){
            float: right;
        }
        .adds li{
            color: #ff9900;
            float: left;
            border:1px solid #ff9900;
            padding: 5px;
            margin: 5px 10px;
            font-size: 20px;
        }
        .footer{
            height: 80px;
            width: 750px;
            background: #888;
            line-height: 100px;
            position: fixed;
            bottom: 0;
        }
        .f-left{
            color: #ffffff;
            font-size: 20px;
            float: left;
        }
        .f-right{
            background: #ff9900;
            color: #333333;
            float: right;
            width: 270px;
            height: 100px;
            line-height: 100px;
            text-align: center;
            font-size: 35px;
        }
    </style>
</head>
<body>
    <div class="container clear-fix">
        <div class="header">
            <div class="h-date"></div>
            <div class="h-sign">
                <span class="empty"></span>
                <span>可选</span>
                <span class="selected"></span>
                <span>已选</span>
                <span class="sold"></span>
                <span>已售</span>
            </div>
        </div>
        <div class="content clear-fix">
            <!--<ul>
                <li></li>
                <li></li>
                <li></li>
                <li class="selected"></li>
                <li></li>
                <li class="sold"></li>
                <li></li>
                <li class="selected"></li>
                <li></li>
                <li></li>
            </ul>
            <ul>
                <li class="sold"></li>
                <li></li>
                <li></li>
                <li></li>
                <li class="sold"></li>
                <li class="selected"></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
            </ul>-->    <!--这是为了实现静态布局写的,布局完成后 其内容由jQuery动态生成-->
        </div>
        <div class="s-bar">
            <div class="text clear-fix">
                <span>已选座位</span>
                <span>最多可选择5个座位</span>
            </div>
            <div class="adds clear-fix">
              <ul class="clear-fix">
                  <!--<li>3排6座</li>
                  <li>3排6座</li>-->
              </ul>
            </div>
        </div>
        <div class="footer clear-fix">
            <div class="f-left">
                <span>合计:</span>
                <span class="total-price"></span>
                <span class="price-count"></span>
            </div>
            <div class="f-right">
                确认选座
            </div>
        </div>
    </div>
    <script src="../jquery-3.3.1.min.js"></script>
    <script>
        var myDate=new Date();//获取当前时间
        var thisMonth=myDate.getMonth();
        var thisDate=myDate.getDate();
        var thisHouver=myDate.getHours();
        var thisMinute=myDate.getMinutes();
        $('.h-date').html('今天是'+thisMonth+'月'+thisDate+'日'+thisHouver+':'+thisMinute);

        var cListHtml=""; //存储动态生成的座位
        var htmArr=[]; //定义一个数组 用来存储被选中的座位信息
        for(var i=0;i<10;i++){
            cListHtml+="<ul class='clear-fix'>";
            for(var j=0;j<10;j++){
                if(Math.random()>0.7){
                    cListHtml+="<li class='sold' sign='"+(i+1)+"排"+(j+1)+"座'></li>";/*sign用来存储座位信息*/
                }
                else {
                    cListHtml+="<li class='empty' sign='"+(i+1)+"排"+(j+1)+"座'></li>"
                }
            }
            cListHtml+="</ul>"
        }
        $(".content").html(cListHtml);
        $(".content li").on("click",function () {
            if((htmArr.length>=5&& !$(this).hasClass("selected"))){
                alert("超出范围");
            }
            else  if($(this).hasClass("sold")){
                alert("此座位已经被占了");
            }
            else {
                $(this).toggleClass("selected").toggleClass("empty");
                if($(this).hasClass("empty")){//又变回可选状态时 从选中区移除
                    removeArr($(this).attr('sign'));
                }else {//否则添加到选中区
                    htmArr.push($(this).attr('sign'));
                }
                var price=100;
                var total=htmArr.length*price;
                $('.total-price').html('¥'+total);
                $('.price-count').html('¥'+htmArr.length+'*100')
            }
            addArr();
        });

        function removeArr(key) {//自定义方法,用来取消用户之前选中的座位
            for(var i=0;i<htmArr.length;i++){
                if(htmArr[i]==key){
                    htmArr.splice(i,1);//移除第i个元素
                }
            }
        }
        function addArr() {//自定义方法 用来记录选中的座位信息
            var thisHtml = "";
            for(var i=0;i<htmArr.length;i++){
                thisHtml+="<li>"+htmArr[i]+"</li>"
            }
            $(".adds ul").html(thisHtml);
        }

    </script>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/LiXSnow/article/details/81191777