美文网首页
习题集锦1.0

习题集锦1.0

作者: 卡西法_冯文新 | 来源:发表于2018-01-24 22:12 被阅读0次

    第1题

    业务场景:在公共JS文件里有可能有(是可能)一个对象Obj;该对象有一个getType返回数据类型的方法;
    要求实现:// 和trim方法相似;没有的时候本地实现他
    1).如果对象不存在;那么本地建这么一个对象Obj并实现getType方法;
    2).如果传入的数据为null时返回null;
    
    var Obj = Obj || function () { };
    
        if(!Obj.prototype.getType){
            Obj.prototype.getType = function (obj) {
                var class2type = {};    //用来保存js数据类型
                var customArr = "Boolean Number String Function Array Date RegExp Object Error".split(" ");
                customArr.forEach( function( name, index) {
                    //构造class2type存储常用类型的映射关系,遍历基本类型并赋值,键值为 [object 类型]
                    class2type[ "[object " + name + "]" ] = name.toLowerCase();
                });
    
                if ( obj == null ) {//首先如果是null则返回null字符串
                    return obj + "";
                }
                //接着判断给定参数类型是否为object或者function,是的话在映射表中寻找 toString后的键值名称并返回,不是的话利用typeof就可以得到正确类型。
                return typeof obj === "object" || typeof obj === "function" ?
                    class2type[ toString.call(obj) ] || "object" :
                    typeof obj;
            }
        }
    
        // 方法检测:
        var myObj = new Obj();
        var result0 = myObj.getType('454'); // string
        var result1 = myObj.getType(454);   // number
        var result2 = myObj.getType(null);  // null
    
        console.log('result0', result0)
        console.log('result1', result1)
        console.log('result2', result2)
    

    第2题

    2.Cookie, LocalStorage 与 SessionStorage区别; // 口述题
    
    1.存储大小:
    存储大小 不超过4K,LocalStorage,SessionStorage可以达到5M
    
    2.数据有效期不同
    sessionStorage 仅在当前浏览器窗口关闭之前有效
    localStorage:始终有效,窗口或浏览器关闭也一直保存,
    cookie:只在设置的cookie过期时间之前有效
    
    3.传递
    cookie在浏览器和服务器间来回传递
    localStorage,sessionStorage 不会自动把数据发送给服务器
    
    4.作用域不同
    sessionStorage不在不同的浏览器窗口中共享
    localstorage在所有同源窗口中都是共享的;
    cookie也是在所有同源窗口中都是共享的
    
    

    第3题

    3.业务场景:活动页面有秒杀模块也有团购模块,需要同步服务器时间来显示倒计时;写一个可供其他同事调用方法;// 同事调用该方法时得到的是已同步好后的时间
    要求实现:
    1) . 定义你所要求后端接口返回的数据格式;
    2). 实现同步服务器时间的方法供其他同事调用;
    3). 注意性能的优化
    
    // 接口数据
    {
         status:true, // 状态
         msg:'获取时间成功', //文字描述
         currentTime:'11:21:55', // 服务器时间
     }
         
    // 方法 
    function getTime(url,fn) {
        $.getAjax(url, function (data) {
            fn(data)
        })
    }
    // 调用
    getTime('http://abc.com/getServerDate', function (value) {
        console.warn( 'value',value);
    })
    

    第4题

    业务场景:如图有距离秒杀结束倒计时功能
    
    要求实现:
    1) . 写出你的html页面结构;
    2) . 调用上面实现的方法实现倒计时功能;(本地时间随意定比服务器时间小就好);
    3).  当倒计时结束三个方框显示:00;
    
    // html
    <div class="timebox">
        <div class="timebox-content">
            <ul>
                <li>
                    <p class="title">海抢货</p>
                    <p class="desc">限时限量汇全网好货</p>
                    <p id="time">00:00:10</p>
                </li>
                <li>
                    <p class="title">有好货</p>
                    <p class="desc">好品味从挑剔开始</p>
                    <p class="blue">品质生活指南</p>
                </li>
            </ul>
        </div>
    </div>
    
    var tid = setInterval(function () {
    
        getTime('http://abc.com/getServerDate', function (syTime) {
            var totalSec = getLeaveSecond(syTime) - 1; // 获取剩余时间
            if (totalSec >= 0) {
                oTimebox.innerHTML = getNewSyTime(totalSec); // 显示时间
            } else {
                clearInterval(tid);
            }
        })
    }, 1000);
    
        function getLeaveSecond () {}
        function getNewSyTime () {}
        
    

    第5题

    5.业务场景:下图为首屏的抽奖界面   //抽奖转动时会顺时针高亮显示产品
    1) . 写出你的html页面结构;
    2). 写出你css类结构不用具体实现;
    3). 抛出你设计思路和性能优化方案
    
    <!-- 代码 开始 -->
    <div class="shanDeng" id="deng">
        <div id="luck">
            <!-- luck -->
            <table style="border-spacing:.08rem .03rem;">
                <tr>
                    <td class="luck-unit luck-unit-0"><img src="./img/01.png"></td>
                    <td class="luck-unit luck-unit-1"><img src="./img/02.png"></td>
                    <td class="luck-unit luck-unit-2"><img src="./img/03.png"></td>
                </tr>
                <tr>
                    <td class="luck-unit luck-unit-7"><img src="./img/05.png"></td>
                    <td class="cjBtn" id="btn"></td>
                    <td class="luck-unit luck-unit-3"><img src="./img/01.png"></td>
                </tr>
                <tr>
                    <td class="luck-unit luck-unit-6"><img src="./img/02.png"></td>
                    <td class="luck-unit luck-unit-5"><img src="./img/04.png"></td>
                    <td class="luck-unit luck-unit-4"><img src="./img/03.png"></td>
                </tr>
            </table>
        </div>
    </div>
    
    <script>
    
        var luck={
            index: 0,   //当前转动到哪个位置,起点位置
            count: 0,   //总共有多少个位置
            timer: 0,   //setTimeout的ID,用clearTimeout清除
            speed: 20,  //初始转动速度
            times: 0,   //转动次数
            cycle: 50,  //转动基本次数:即至少需要转动多少次再进入抽奖环节
            prize: -1,  //中奖位置
    
            init:function(id){
                // 初始化
                if ($("#"+id).find(".luck-unit").length>0) {
                    $luck = $("#"+id);
                    $units = $luck.find(".luck-unit");
                    this.obj = $luck;
                    this.count = $units.length;
                    $luck.find(".luck-unit-"+this.index).addClass("active");
                };
            },
    
            roll:function(){
                // 走动
                var index = this.index;
                var count = this.count;
                var luck = this.obj;
                $(luck).find(".luck-unit-"+index).removeClass("active");
                index += 1;
                if (index>count-1) {
                    index = 0;
                };
                $(luck).find(".luck-unit-"+index).addClass("active");
                this.index=index;
                return false;
            },
    
            stop:function(index){
                this.prize=index;
                return false;
            }
        };
    
    
        function roll(){
            luck.times += 1;
            luck.roll();
            if (luck.times > luck.cycle+10 && luck.prize==luck.index) {
                // 出奖(到达中奖位置)
                clearTimeout(luck.timer);
                luck.prize=-1;
                luck.times=0;
                click=false;
            }else{
                if (luck.times<luck.cycle) {
                    luck.speed -= 10; // 加速
                }else if(luck.times==luck.cycle) { // 锁定中奖位置
                    /*var index = Math.random()*(luck.count)|0;
                    if(index>5){
                        index = 7;
                    }else {
                        index = 5;
                    }
                    luck.prize = index;//最终中奖位置*/
                    luck.prize = RandomNumBoth(0,7);//最终中奖位置
                }else{
                    if (luck.times > luck.cycle+10 && ((luck.prize==0 && luck.index==7) || luck.prize==luck.index+1)) {
                        // 下一个就是中奖位置时。延长时间再显示
                        luck.speed += 110;
                    }else{
                        luck.speed += 20; // 越来越慢
                    }
                }
                if (luck.speed<40) {
                    luck.speed=40; // 匀速时间
                };
    //          console.log('luck.speed ',luck.speed !=40 ? luck.speed : '40'+Math.random() )
                console.log('luck.speed ',luck.speed)
    //            roll()
                luck.timer = setTimeout(roll,luck.speed);
            }
            return false;
        }
    
    
        var click=false;
        window.onload=function(){
            luck.init('luck');
            $("#btn").click(function(){
                //按下弹起效果
                $("#btn").addClass("cjBtnDom");
                setTimeout(function(){  
                    $("#btn").removeClass("cjBtnDom");
                },200);
    
                if(click) {
                    return false;
                }
                else{
                    luck.speed=100;
                    roll();
                    click=true;
                    return false;
                }
    
            });
        };
    
        console.log('1212')
    
        function RandomNumBoth(Min,Max){
            // 某个范围的随机数 min ≤ r ≤ max
            var Range = Max - Min;
            var Rand = Math.random();
            var num = Min + Math.round(Rand * Range); //四舍五入
            return num;
        }
        
    
    </script>
    

    相关文章

      网友评论

          本文标题:习题集锦1.0

          本文链接:https://www.haomeiwen.com/subject/kkdraxtx.html