案例

计算器

  var input,divs,firsValue,symbol;
        init();
        /*
        获取input和所有被点击的divs列表,并且,循环
        所有的divs元素,给每个添加点击事件,点击后执行
        clickHandler函数
        */
        function init(){
            input=document.getElementById("input");
            divs=document.getElementsByClassName("divs");
            for(var i=0;i<divs.length;i++){
                divs[i].onclick=clickHandler;
                
            }
       
        }
        /*
        当点击divs时,进入下面的函数,this就是被点击的那个div
        判断div的内容是不是数值,如果是数值,将innerHTML的内容
        传参到addNumber函数中
        */
        function clickHandler(){
        if(!isNaN(this.innerHTML)){
            //点击数字进入
            addNumber(this.innerHTML)
        }else if(this.innerHTML==="c"){
            // 点击C进入
            clearIput();

        }else if(this.innerHTML==="="){

            // 点击=进入
            calculate();
        }else{ 
            // 点击+ - * /进入  并且传入当前点击的符号
           changeSymbol(this.innerHTML);

        }

    }
      //把输入框内原本的文本内容链接传入的这个数值字符串,
      //把链接好的字符串把他们转换成数值,这样就可以去掉前面的0
    function addNumber(n){
       
        input.value=Number(input.value+n);
    }
    /*
    执行这个内容是会清除里面的内容
    */
   function clearIput(){
       input.value="0";
       Symbol="";
       firstValue="";

   }

   function  calculate(){
       
    //    console.log(firstValue,Symbol);
    //    console.log(input.value);
    //如果symbol是什么字符,根据字符完成firstValue和现在当前文本的运算
       switch(Symbol){
           case "+":
               input.value=Number(input.value)+Number(firstValue);
               break;
            case "-":
               input.value=firstValue-input.value;
               break;
             case "*":
               input.value=firstValue*input.value;
               break;
             case "/":
               input.value=firstValue/input.value;
               break;

       }

   }
   function changeSymbol(type){
       //type就是点击的符号,Input.value就是现在文本框显示数字
    //    分别把这两个内容储存在全局变量symbol和firstValue中
       Symbol=type;
       firstValue=input.value;

       input.value="0";

   }


表单框验证1224

 <input type="text" name="user"><label></label>
    <script>
        var ids;
        var input=document.querySelector("input");
        var label=document.querySelector("label");
        input.addEventListener("input",inputHandler);

        function inputHandler(e){
            if(ids) return;
            ids=setTimeout(function(){
                clearTimeout(ids);
                ids=undefined;
                if(verifyValue(input.value)){
                    label.textContent="输入正确";
                    label.className="sucess";
                }else{
                    label.textContent="输入错误";
                    label.className="error";
                }
            })
        }


        function verifyValue(str){
            // return /\d/.test(str);
            // return /^[1-9]$|^[12]\d$|^3[01]$/.test(str);//1-31
            // return /^1\d{10}$/.test(str);
            // return /^\w{1,30}\@\w{1,10}\.\w{2,4}$/.test(str);//邮箱验证
            return /^[1-9]$|^[1-9]\d$|^[1]\d\d$|^[2][0-4]\d$|^[2][5][0-5]$/.test(str)//1-255
        }

        // 1-30 字符
        // @
        // 1-10 字符
        // .
        // 2-4 字符

    </script>

菜单 1222

<script>

        // var lis=document.querySelectorAll("li");
        // for(var i=0;i<lis.length;i++){
        //     lis[i].addEventListener("click",clickHandler);
        // }


        // function clickHandler(e){
        //     if(!this.firstElementChild) return;
        //     e.stopPropagation();
        //     var ul=this.firstElementChild;
        //     if(ul.getAttribute("open")!=="true"){
        //         ul.setAttribute("open","true");
        //     }else{
        //         ul.removeAttribute("open");
        //     }
        // }


        var city=document.querySelector(".city");

        city.addEventListener("click",clickhandler);

        function clickhandler(e){
            if(e.target.nodeName!=="LI") return;
            var ul=e.target.firstElementChild;
            if(!ul) return;
            if(ul.getAttribute("open")!=="true"){
                ul.setAttribute("open","true");
            }else{
                ul.removeAttribute("open");
            }
        }
    </script>

倒计时 1217

 <script>
        var div,startBn,stopBn,date;
        var bool=false,value=0;

        init();

        /* 
            初始函数
            获取div元素,开始按钮和停止按钮
            给开始按钮增加点击事件,执行clickStartHandler函数
            给停止按钮增加点击事件,执行clickStopHandler函数
            开启setInterval,每间隔16毫秒执行show函数
        */
        function init(){
            div=document.getElementById("div1");
            startBn=document.getElementById("startBn");
            stopBn=document.getElementById("stopBn");
            startBn.onclick=clickStartHandler;
            stopBn.onclick=clickStopHandler;
            setInterval(show,1);
        }

        /* 
            当点击开始按钮时的事件处理函数
            改变这个按钮开始或者暂停的显示
            改变开关,影响时间间隔函数是否进入函数内处理内容
            点击开始时获取当期时间,用来作为显示时不断被减的时间值
            点击暂停时,不断累加本次暂停前时间差



            如果点击按钮内容是"开始",认为这个时候开始每间隔16毫秒执行show
            函数,先把按钮里面的内容修改"暂停",设置开关为true,当设置为true
            show函数,每16毫秒执行时就会判断这个开会是不是true,如果是false
            时就会跳出,不执行后面的内容
            存储当前时间
            如果点击按钮的内容不是"开始",而是"暂停"时,这个时候,我们先把按钮
            里面的内容修改为开始,设置开关为false,这样就会影响show函数每16毫秒
            判断不在进入函数里面执行内容,
            累加当前暂停前的时间差,用于下次启动对于数据的累加
        
        
        */

        function clickStartHandler(){
            if(this.innerHTML==="开始"){
                this.innerHTML="暂停"
                bool=true;
                date=new Date();
            }else{
                this.innerHTML="开始";
                bool=false;
                value+=Date.now()-date.getTime();
            }
        }

        /* 
            点击停止按钮
            清除所有时间差
            清除div中显示归0
            将开始按钮固定内容为"开始"
            开关变为false,不再执行show里面的内容了
        
        
        */
        function clickStopHandler(){
            value=0;
            div.innerHTML="00:00:000";
            startBn.innerHTML="开始";
            bool=false;
        }

        /* 
            show函数 每间隔16毫秒执行这个函数
            如果开关是false时,不执行这个函数内容,直接跳出
            先获取到当前运行的时间差,加上以前暂停前累加的时间差
            分别计算出小时,分,秒,毫秒
            并且再div中显示
        */
        function show(){
            if(!bool) return;
            var num=(Date.now()-date.getTime())+value;
            var h=~~(num/3600/1000);
            var m=~~((num-h*3600000)/1000/60);
            var s=~~((num-h*3600000-m*60000)/1000);
            var ms=~~(num%1000);
           div.innerHTML=getNum(m)+":"+getNum(s)+":"+getNum(ms,3);
        }

        function getNum(n,m){
            if(m===undefined) m=2;
            n=String(n);
            for(var i=n.length;i<m;i++){
                n="0"+n;
            }
            return n
        }
    </script>

电梯导航 1220

 <script>
        var lis,div;
        var targetTop=0;
        var speed=0,time=10;
        init();
        /* 
            获取li和div列表,li列表需要转换为数组
            循环给每个li增加点击事件
            设置事件间隔
        
        */
        function init(){
            lis=Array.from(document.querySelectorAll("li"));
            div=document.querySelectorAll("div");
            for(var i=0;i<lis.length;i++){
                lis[i].onclick=clickHandler;
            }
            setInterval(move,16);
        }

        /* 
            time!=0跳出这个条件正在运行时,不可以点击
            获取到当前被点击的元素是数组中第几个下标,对应的div需要跳转到第几个位置
            获取这个第几个div的距离顶端的距离
            计算目标位置与当前位置的差值,除以10,分10次运行每次运行的速度
        */
        function clickHandler(){
            if(time!==10) return;
            var index=lis.indexOf(this);
            targetTop=div[index].offsetTop;
            speed=(targetTop-document.documentElement.scrollTop)/time;

        }

        /* 
            当目标位置的结果不是0时,执行move函数
            如果当前次数等于0,表示运行次数完成
            将目标位置归0,下次不进入,将当前的次数重新变为10,跳出
            如果当前次数不是0的时候,time-1,设置滚动条的位置为当前位置+speed
        
        */
        function move(){
            if(targetTop===0) return;
            if(time===0){
                targetTop=0;
                time=10;
                return;
            }
            time--;
            document.documentElement.scrollTop+=speed;
        }
    </script>

轮播图 1221

  <script>
        var imgIconList,imgList,prevImg,prevIcon;

        init();
        function init(){
            imgIconList=Array.from(document.querySelectorAll(".crousel>ul img"));
            imgList=Array.from(document.querySelectorAll(".crousel>.img-con>img"));
            for(var i=0;i<imgIconList.length;i++){
                imgIconList[i].onclick=clickhandler;
            }
            changePrev(0);
        }


        function clickhandler(){
            var index=imgIconList.indexOf(this);
            changePrev(index);
        }

        function changePrev(index){
            if(prevImg) prevImg.style.opacity=0;
            if(prevIcon) prevIcon.style.borderColor="transparent"//"#FF9D00"
            prevImg=imgList[index];
            prevIcon=imgIconList[index];
            prevImg.style.opacity=1;
            prevIcon.style.borderColor="#FF9D00";
        }


    </script>

选色块--历史记录1221

  <script>
        var prev;
        var bus=Array.from(document.querySelectorAll("button"));
        var divs=document.querySelectorAll("div");
        //替换当前状态的数据
        history.replaceState({num:0},"0");
        changePrev(0);
        for(var i=0;i<bus.length;i++){
            bus[i].onclick=clickHandler;
        }
        window.onpopstate=popStateHandler;
        function clickHandler(){
            var index=bus.indexOf(this);
            //往他的尾部添加一个状态
            history.pushState({num:index},index);
            changePrev(index);
        }

        function changePrev(index){
            if(prev){
                prev.style.display="none";
            }
            prev=divs[index];
            prev.style.display="block";
        }

        function popStateHandler(){
            //添加监听事件
            changePrev(history.state.num);
        }
    </script>

导航栏1223

<script>
        var ul,divs,div,prev;
        init();
        function init(){
            ul=document.querySelector("ul");
            divs=document.querySelectorAll(".div1")
            div=document.querySelector("ul>div");
            ul.addEventListener("mouseover",mouseoverHandler);
            movePoistion(ul.children[1]);
        }

        function mouseoverHandler(e){
            if(e.target.nodeName!=="LI") return;
            movePoistion(e.target);
        }

        function movePoistion(li){
            div.style.left=li.offsetLeft+"px";
           var index=Array.from(ul.children).slice(1).indexOf(li)
            if(prev){
                prev.style.display="none";
            }
            prev=divs[index];
            prev.style.display="block";
        }
    </script>

拖拽1223

  <script>
        // var div1=document.querySelector(".div1");
        // div1.onmousedown=function(evt){
        //     // 先按下鼠标键 针对div1按下键
        //     document.onmousemove=function(e){
        //         // 鼠标移动  针对document移动 每次移动获取当前鼠标相对视口的距离-按下瞬间时相对当前div1的左上角距离
        //         div1.style.left=e.clientX-evt.offsetX+"px";
        //         div1.style.top=e.clientY-evt.offsetY+"px";
        //     }
        //     div1.onmouseup=function(){
        //         document.onmousemove=null;
        //     }
           
        // }


        /* var x1=0,y1=0;
        var div1=document.querySelector(".div1");
        div1.addEventListener("mousedown",mousedownHandler);

        function mousedownHandler(e){
            // e.offsetX,e.offsetY
            x1=e.offsetX;
            y1=e.offsetY;
            document.addEventListener("mousemove",mousemoveHandler);
            document.addEventListener("mouseup",mouseupHandler);
        }

        function mousemoveHandler(e){
            div1.style.left=e.clientX-x1+"px";
            div1.style.top=e.clientY-y1+"px";
        }

        function mouseupHandler(e){
            document.removeEventListener("mousemove",mousemoveHandler);
            document.removeEventListener("mouseup",mouseupHandler);
        } */



        var x1=0,y1=0;
        var div1=document.querySelector(".div1");
        div1.addEventListener("mousedown",mouseHandler);


        function mouseHandler(e){
            if(e.type==="mousedown"){
                x1=e.offsetX;
                y1=e.offsetY;
                document.addEventListener("mousemove",mouseHandler);
                document.addEventListener("mouseup",mouseHandler);
            }else if(e.type==="mousemove"){ 
               div1.style.left=e.clientX-x1+"px";
                div1.style.top=e.clientY-y1+"px";
            }else if(e.type==="mouseup"){
                document.removeEventListener("mousemove",mouseHandler);
                document.removeEventListener("mouseup",mouseHandler);
            }
        }

    </script>
posted @ 2021-12-26 14:56  满天星可以嘛  阅读(33)  评论(0编辑  收藏  举报