酒店移动端入住离店日期选择demo(转)

原作者:http://blog.csdn.net/cj14227/article/details/65629737

效果图:

demo 代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="format-detection" content="telephone=no">
    <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
    <script src="http://www.jq22.com/jquery/jquery-1.10.2.js"></script>

    <!--<script src="RangeTime/jQueryTime/js/jquery.min.js"></script>-->
    <title>Document</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        input{
            border:none;
            width: 200px;
        }
        #RangeDate{
            display: flex;
            flex-wrap: wrap;
            text-align: center;
            font-size: 14px;
            line-height: 50px;
            color: #333;
            position: fixed;
            bottom: 0;
            left: 0;
            width: 100%;
            overflow: hidden;
        }
        .RangeDate_xinqi{
            width: 14%;
            height: 40px;
            line-height: 40px;
            color: #666;
        }
        .RangeDate_title{
            height: 36px;
            line-height: 36px;
            font-size: 14px;
            color: #333;
            background: #fafafa;
            width: 100%;
            border-bottom: 1px solid #eee;
            border-top: 1px solid #eee;
        }
        .RangeDate_day{
            height: 48px;
            width: 14%;
            position: relative;
            margin:1px 0;
        }
        .RangeDate_day:before{
            content: '';
            display: none;
            position: absolute;
            color: #fff;
            width: 0;
            height: 0;
            top: -6px;
            left: 30px;
            border-left: 3px solid transparent;
            border-right: 3px solid transparent;
            border-top: 6px solid rgba(0,0,0,0.7);
        }
        .RangeDate_promptSmall{
            position: absolute;
            top: -26px;
            left: 5%;
            background: rgba(0,0,0,0.7);
            border-radius: 2px;
            color: #FFF;
            padding: 0 6px;
            line-height: 20px;
            font-size: 12px;
            white-space: nowrap;
        }
        .RangeDate_promptBig{
            position: absolute;
            top: -26px;
            left: -40%;
            background: rgba(0,0,0,0.7);
            border-radius: 2px;
            color: #FFF;
            padding: 0 6px;
            line-height: 20px;
            font-size: 12px;
            white-space: nowrap;
        }
        .RangeDate_promptBigLeft{
            position: absolute;
            top: -26px;
            left: 0;
            background: rgba(0,0,0,0.7);
            border-radius: 2px;
            color: #FFF;
            padding: 0 6px;
            line-height: 20px;
            font-size: 12px;
            white-space: nowrap;
        }
        .RangeDate_promptBigRight{
            position: absolute;
            top: -26px;
            right: 0;
            background: rgba(0,0,0,0.7);
            border-radius: 2px;
            color: #FFF;
            padding: 0 6px;
            line-height: 20px;
            font-size: 12px;
            white-space: nowrap;
        }
        .RangeDate_dayShow:before{
            display: block;
        }
        .RangeDate_dayStart:after{
            content: '入住';
            display: block;
        }
        .RangeDate_dayEnd:after{
            content: '离店';
            display: block;
        }
        .RangeDate_dayStart{
            line-height: 24px;
            background: #2db6a6;
            border-top-left-radius: 4px;
            border-bottom-left-radius: 4px;
            color: #fff;
        }
        .RangeDate_dayCenter{
            background: #dff3f1;
        }
        .RangeDate_dayEnd{
            line-height: 24px;
            background: #2db6a6;
            border-top-right-radius: 4px;
            border-bottom-right-radius: 4px;
            color: #fff;
        }
        .RangeDate_A1{
            color: #a1a1a1;
        }
        .RangeDate_dayNo{
            color:#a2a2a2;
        }
        .RangeDate_week{
            color: #f9957b;
        }
        .RangeDate_head{
            width: 100%;
            box-sizing: border-box;
            text-align: left;
            color: #666;
            font-size: 16px;
            padding-left: 20px;
            border-bottom: 1px solid #eee;
        }
        .RangeDate_done{
            color: #27b4a4;
            float: right;
            height: 30px;
            line-height: 30px;
            border-radius: 4px;
            border: 1px solid #27b4a4;
            margin: 10px 20px;
            padding:0 10px;
        }
        #RangeDate_container{
            display: flex;
            align-items: center;
            width: 100%;
            height:300px;
            overflow-y: scroll;
            overflow-x: hidden;
            flex-wrap: wrap;
        }
        .RangeDate_none{
            display: none !important;
        }
    </style>
</head>
<body>
    <!--<div id="RangeDate" class="RangeDate_none">-->
        <!--<div class="RangeDate_head">-->
            <!--请选择入离日期-->
            <!--<div class="RangeDate_done">-->
                <!--完成-->
            <!--</div>-->
        <!--</div>-->
        <!--<div class="RangeDate_xinqi RangeDate_week">日</div>-->
        <!--<div class="RangeDate_xinqi">一</div>-->
        <!--<div class="RangeDate_xinqi">二</div>-->
        <!--<div class="RangeDate_xinqi">三</div>-->
        <!--<div class="RangeDate_xinqi">四</div>-->
        <!--<div class="RangeDate_xinqi">五</div>-->
        <!--<div class="RangeDate_xinqi RangeDate_week">六</div>-->
        <!--<div id="container"></div>-->
    <!--</div>-->
    <div>
        <input type="text" readonly id="test" value="点我试试看">
    </div>
</body>
<script>
    window.RangeDate=function(RangeDateID){
        $('body').append(
            '<div id="RangeDate" class="RangeDate_none">'+
                '<div class="RangeDate_head">'+
                    '请选择入离日期'+
                    '<div class="RangeDate_done">'+
                       '完成'+
                    '</div>'+
                '</div>'+
                '<div class="RangeDate_xinqi RangeDate_week">日</div>'+
                '<div class="RangeDate_xinqi">一</div>'+
                '<div class="RangeDate_xinqi">二</div>'+
                '<div class="RangeDate_xinqi">三</div>'+
                '<div class="RangeDate_xinqi">四</div>'+
                '<div class="RangeDate_xinqi">五</div>'+
                '<div class="RangeDate_xinqi RangeDate_week">六</div>'+
                '<div id="RangeDate_container"></div>'+
            '</div>'
        )



        var today=new Date();
        var fu=document.querySelector('#RangeDate_container');
        var startWeek=new Date(today.getFullYear(),today.getMonth(),1). getDay();
        var dayNum=32-(new Date(today.getFullYear(),today.getMonth(),32).getDate());
        var monthNum= 0,flag= 1,RangeDate_start=true,RangeDate_end=true,RangeDate_startId='',RangeDate_endId='',RangeDate_center=[];
        var prompt=document.createElement('div');
        $(prompt).addClass('RangeDate_prompt')

        function getDay(attr){
            var monthTitle=document.createElement('div');
            $(monthTitle).addClass('RangeDate_title');
            monthTitle.innerHTML=new Date(today.getFullYear(),today.getMonth()+monthNum,1).getFullYear()+''+(new Date(today.getFullYear(),today.getMonth()+monthNum,1).getMonth()+1)+'';
            fu.appendChild(monthTitle);
            var firstDay=document.createElement('div');
            $(firstDay).addClass('RangeDate_day');
            $(firstDay).attr('id','RangeDate_'+flag);
            $(firstDay).attr('data-id',attr+'1');
            flag++;
            firstDay.style.marginLeft=startWeek*14+"%";
            firstDay.style.width='14%';
            firstDay.innerHTML='1';
            firstDay.onclick=function(){
                RangeDateClick(this);
            }
            fu.appendChild(firstDay);
            for(var i=2;i<=dayNum;i++){
                var j=document.createElement('div');
                $(j).addClass('RangeDate_day');
                $(j).attr('id','RangeDate_'+flag);
                flag++;
                j.innerHTML=i+'';
                $(j).attr('data-id',attr+i);
                j.onclick=function(){
                    RangeDateClick(this);
                }
                fu.appendChild(j)
            }
            monthNum++;
            startWeek=new Date(today.getFullYear(),today.getMonth()+monthNum,1).getDay();
            dayNum=32-(new Date(today.getFullYear(),today.getMonth()+monthNum,32).getDate());
        }

        function RangeDateClick(ele){
            console.log($('#RangeDate_container').width()-$(ele).offset().left-$(ele).width())
            if(RangeDate_start){
                $(ele).addClass('RangeDate_dayStart');
                $(ele).addClass('RangeDate_dayShow');
                RangeDate_start=false;
                RangeDate_startId=$(ele).attr('id');
                $(prompt).removeClass();
                if($(ele).offset().left<=10){
                    $(prompt).addClass('RangeDate_promptBigLeft')
                }else if($('#RangeDate_container').width()-$(ele).offset().left-$(ele).width()<=10){
                    $(prompt).addClass('RangeDate_promptBigRight')
                }else {
                    $(prompt).addClass('RangeDate_promptBig')
                }
                $(ele)[0].appendChild(prompt);
                prompt.innerHTML='请选择离店时间';
                return;
            }
            if(RangeDate_end){
                if($(ele).attr('id').split('_')[1]*1>$('#'+RangeDate_startId).attr('id').split('_')[1]*1){
                    $(prompt).removeClass();
                    $('#'+RangeDate_startId).removeClass('RangeDate_dayShow');
                    $(ele).addClass('RangeDate_dayEnd');
                    RangeDate_end=false;
                    RangeDate_endId=$(ele).attr('id');
                    $('#'+RangeDate_endId).addClass('RangeDate_dayShow');
                    $(prompt).addClass('RangeDate_promptSmall');
                    $('#'+RangeDate_endId)[0].appendChild(prompt);
                    prompt.innerHTML=''+(RangeDate_endId.split('_')[1]-RangeDate_startId.split('_')[1])+'';
                }else if($(ele).attr('id').split('_')[1]<$('#'+RangeDate_startId).attr('id').split('_')[1]){
                    $(prompt).removeClass();
                    $('#'+RangeDate_startId).removeClass('RangeDate_dayShow');
                    $('#'+RangeDate_startId).removeClass('RangeDate_dayStart');
                    $('#'+RangeDate_startId).addClass('RangeDate_dayEnd');
                    RangeDate_endId=$('#'+RangeDate_startId).attr('id');
                    $(ele).addClass('RangeDate_dayStart');
                    RangeDate_startId=$(ele).attr('id');
                    $('#'+RangeDate_endId).addClass('RangeDate_dayShow');
                    $(prompt).addClass('RangeDate_promptSmall');
                    $('#'+RangeDate_endId)[0].appendChild(prompt);
                    prompt.innerHTML=''+(RangeDate_endId.split('_')[1]-RangeDate_startId.split('_')[1])+'';
                    RangeDate_end=false;
                }else {
                    return;
                }
                if(RangeDate_center.length>0){
                    for(var i=0;i<RangeDate_center.length;i++){
                        $('#RangeDate_'+RangeDate_center[i]).removeClass('RangeDate_dayCenter');
                    }
                    RangeDate_center=[];
                }
                for(var i=RangeDate_startId.split('_')[1]*1+1;i<RangeDate_endId.split('_')[1]*1;i++){
                    $('#RangeDate_'+i).addClass('RangeDate_dayCenter');
                    RangeDate_center.push(i)
                }
                return;
            }
            if(!RangeDate_start && !RangeDate_end){
                $('#'+RangeDate_startId).removeClass('RangeDate_dayStart');
                $('#'+RangeDate_endId).removeClass('RangeDate_dayEnd');
                $('#'+RangeDate_endId).removeClass('RangeDate_dayShow');
                $('#'+RangeDate_endId)[0].removeChild(prompt);
                $(ele).addClass('RangeDate_dayStart');
                $(ele).addClass('RangeDate_dayShow');
                $(prompt).removeClass();
                if($(ele).offset().left<=10){
                    $(prompt).addClass('RangeDate_promptBigLeft')
                }else if($('#RangeDate_container').width()-$(ele).offset().left-$(ele).width()<=10){
                    $(prompt).addClass('RangeDate_promptBigRight')
                }else {
                    $(prompt).addClass('RangeDate_promptBig')
                }
                $(ele)[0].appendChild(prompt);
                prompt.innerHTML='请选择离店时间';
                RangeDate_startId=$(ele).attr('id');
                RangeDate_end=true;
                if(RangeDate_center.length>0){
                    for(var i=0;i<RangeDate_center.length;i++){
                        $('#RangeDate_'+RangeDate_center[i]).removeClass('RangeDate_dayCenter');
                    }
                    RangeDate_center=[];
                }
            }
        }
        getDay(new Date(today.getFullYear(),today.getMonth()+1,1).getFullYear()+'-'+new Date(today.getFullYear(),today.getMonth()+1,1).getMonth()+'-');
        getDay(new Date(today.getFullYear(),today.getMonth()+2,1).getFullYear()+'-'+new Date(today.getFullYear(),today.getMonth()+2,1).getMonth()+'-');
        getDay(new Date(today.getFullYear(),today.getMonth()+3,1).getFullYear()+'-'+new Date(today.getFullYear(),today.getMonth()+3,1).getMonth()+'-');
        getDay(new Date(today.getFullYear(),today.getMonth()+4,1).getFullYear()+'-'+new Date(today.getFullYear(),today.getMonth()+4,1).getMonth()+'-');

        $('#RangeDate_'+new Date().getDate()).html('今天');
        RangeDateClick($('#RangeDate_'+new Date().getDate()));
        RangeDateClick($('#RangeDate_'+($('#RangeDate_'+new Date().getDate()).attr('id').split('_')[1]*1+1)));

        for(var i=new Date().getDate()-1;i>0;i--){
            $('#RangeDate_'+i).addClass('RangeDate_dayNo');
            $('#RangeDate_'+i)[0].onclick=null;
        }
        $('#'+RangeDateID).bind('click',function(){
            $('#RangeDate').toggleClass('RangeDate_none');
        });
        $('.RangeDate_done').bind('click',function(){
            console.log(RangeDate_start)
            console.log(RangeDate_end)
            if(!RangeDate_start && !RangeDate_end){
                $('#RangeDate').addClass('RangeDate_none');
                $('#'+RangeDateID).val($('#'+RangeDate_startId).attr('data-id')+''+$('#'+RangeDate_endId).attr('data-id')+''+(RangeDate_endId.split('_')[1]*1-RangeDate_startId.split('_')[1]*1)+'')
            }
        })
    }
    RangeDate('test')
</script>
</html>
原文地址:https://www.cnblogs.com/ryans/p/7083967.html