js练习例题

6.28

1.tab复用

<style>
            *{
                padding: 0px;
                margin: 0px;
            }
            
            #tab{
                width: 600px;
                height: 500px;
                border:5px solid blue;
                margin: 0 auto;
                
                position: relative;
            }
            
            li{
                list-style: none;
                float: left;
                width: 200px;
                height: 50px;
                line-height: 50px;
                font-size: 30px;
                color: #fff;
                text-align: center;
            }
            li:nth-of-type(1){
                background-color: red;
            }
            li:nth-of-type(2){
                background-color:green;
            }
            li:nth-of-type(3){
                background-color:blue;
            }
            
            #tab .con{
                width: 580px;
                height: 420px;
                position: absolute;
                left: 10px;
                top: 60px;
                /* display: none; */
            }
            
            #tab .con:nth-of-type(1){
                
                z-index:1;
                background-color: red;
                
            }
            #tab .con:nth-of-type(2){
                background-color:green;
            
            }
            #tab .con:nth-of-type(3){
                background-color:blue;
                
            }
        </style>
    </head>
    <body>
        <script type="text/javascript">
            
            // var tab = document.querySelector('#tab');
            // console.log(tab);null
            
            // window.onload延迟加载执行 等页面所有的html加载完后 再执行
            window.οnlοad=function(){
                
                 // console.log(tab);
                 var lis = document.querySelectorAll('ul li');
                 var cons = document.querySelectorAll('.con');
                 
                 
                 //for循环给每个li标签加点击事件
                 // for (var i = 0; i < lis.length; i++) {
                    //  lis[i].index = i;
                 //     lis[i].onclick = function(){
                        
                    //     for (var j = 0; j <cons.length; j++) {
                    //         lis[j].style.color = 'white';
                    //         cons[j].style.display = 'none';
                    //     }
                    //     // console.log(lis[i-1]); 指向的是li最后一项
                    //     // console.log(this); this指向的是当前点击的li
                    //     cons[this.index].style.display = 'block';
                    //     this.style.color='orange';
                    // }
                 // }
                 
                 
                 // tab栏复用
                 var tabs = document.querySelectorAll('.tab');
                 for (var i = 0; i < tabs.length; i++) {
                        fn(tabs[i]);
                 }
                 function fn(e){
                     var lis = e.querySelectorAll('ul li');
                     var cons = e.querySelectorAll('.con');
                     
                     for (var i = 0; i < lis.length; i++) {
                                          lis[i].index = i;
                         lis[i].onclick = function(){
                                             
                             for (var j = 0; j <cons.length; j++) {
                                lis[j].style.color = 'white';
                                 cons[j].style.display = 'none';
                             }
                             // console.log(lis[i-1]); 指向的是li最后一项
                             // console.log(this); this指向的是当前点击的li
                             cons[this.index].style.display = 'block';
                             this.style.color='orange';
                             }
                     }
                 }
                 
            }
            // 下面这种写法也是可以的 都是延迟加载执行
            // window.addEventListener('load',function(){
                
            // })
        </script>
        <div id="tab" class="tab">
            <ul>
                <li>新闻</li>
                <li>图片</li>
                <li>军事</li>
            </ul>
            <div class="con"></div>
            <div class="con"></div>
            <div class="con"></div>
        </div>
        <div id="tab" class="tab">
            <ul>
                <li>新闻</li>
                <li>图片</li>
                <li>军事</li>
            </ul>
            <div class="con"></div>
            <div class="con"></div>
            <div class="con"></div>
        </div>
        
        <div id="tab" class="tab">
            <ul>
                <li>新闻</li>
                <li>图片</li>
                <li>军事</li>
            </ul>
            <div class="con"></div>
            <div class="con"></div>
            <div class="con"></div>
        </div>

效果图:

2.常用鼠标事件

<style>
            body{
                height: 2000px;
            }
            
        </style>
        
    </head>
    <body>
        <br>
        <br>
        <br>
        <br>
        <br>
        <br>
        <br>
        <br>
        <br>
        <br>
        <br>
        <br>
        <br>
        <br>
        <br>
        <span>禁用鼠标右键和不能复制文字</span>
        <input type="button" name="" id="" value="点击看坐标数据" />
        
        <script type="text/javascript">
            // document.addEventListener('click',function(){
            //     // alert('整个文档即使整个页面都可以点击');
                
            // })
            // contextmenu鼠标右键被禁用
            // document.addEventListener('contextmenu',function(e){
            //     // alert('整个文档即使整个页面都可以点击');
            //      e.preventDefault();
            // })
            
            //selectstart 禁止选中文字
            // document.addEventListener('selectstart',function(e){
            //     // alert('整个文档即使整个页面都可以点击');
            //      e.preventDefault();
            // })
            
            //获得鼠标再页面中的坐标
            // clientX 鼠标相对于浏览器左上角x轴的坐标; 不随滚动条滚动而改变;
            // clientY 鼠标相对于浏览器左上角y轴的坐标; 不随滚动条滚动而改变;
            // pageX 鼠标相对于浏览器左上角x轴的坐标; 随滚动条滚动而改变;
            // pageY 鼠标相对于浏览器左上角y轴的坐标; 随滚动条滚动而改变;
            // screenX 鼠标相对于显示器屏幕左上角x轴的坐标;
            // screenY 鼠标相对于显示器屏幕左上角y轴的坐标;
            document.addEventListener('click',function(e){
                // console.log('screenX ',e.screenX,'pageX',e.pageX,'clientX',e.clientX);
                
                console.log('screenY ',e.screenY,'pageY',e.pageY,'clientY',e.clientY);
            })
        </script>

效果图:

6.29

1.图片跟随鼠标移动

<title></title>
        <style type="text/css">
            img{
                position: fixed;
                left: 0px;
                top: 0px;
            }
        </style>
    </head>
    <body>
        <img src="icon_2.png" >
        <script type="text/javascript">
            var img = document.querySelector('img');
            // mousemove鼠标移动事件
            document.addEventListener('mousemove',function(e){
                var pagex = e.pageX-20+'px';
                var pagey = e.pageY-20+'px';
                // console.log(pagex,pagey);
                img.style.left = pagex;
                img.style.top = pagey;
            })
        </script>

效果图

 2.常用的键盘事件

    <title></title>
    </head>
    <body>
        <script type="text/javascript">
            document.addEventListener('keyup',function(){
                console.log('键盘按键松开了');
            })
            
            // document.addEventListener('keydown',function(){
            //     console.log('键盘按下了');
            // })
            
            document.addEventListener('keypress',function(){
                console.log('键盘按下了,但是不识别ctrl和shift键盘');
            })
        </script>

3.键盘事件小练习

</head>
    <body>
        用户信息:<span class="ustxt"></span><br>
        <input type="text" id="username">
        <input type="button" name="" id="btn" value="提交信息" />
        
        <!-- 以前的方法 -->
        <script type="text/javascript">
            var ustxt = document.querySelector('.ustxt');
            var username = document.querySelector('#username');
            var btn = document.querySelector('#btn');
            //给按钮加点击事件
            // btn.onclick = function(){
            //     // msg获得的是表单输入的内容
            //     var msg = username.value;
            //     // 将获得的内容写入span标签中
            //     ustxt.innerText = msg;
            // }
            
            // 按回车键添加用户信息
            //  enter回车键 对应的ASCII码值是13 
            // ASCII码值可以用keycode获得
    
            username.addEventListener('keyup',function(e){
                // console.log(e.keyCode);
                if(e.keyCode==13){
                    var msg = username.value;
                    ustxt.innerText = msg;
                }
            })
            
        </script> 

效果图:

4.Window常用对象

</head>
    <body>
        <span>页面信息内容</span>
        <script type="text/javascript">
            // window最为顶级对象 一般可以忽略不写
            // window.alert('window里面的一个方法');
            // alert('window里面的一个方法');
            
            window.onload = function(){
                console.log('页面以加载完成,包括图片 视频 css文件等等');
            }
            
            window.addEventListener('DOMContentLoaded',function(){
                console.log('仅dom加载完成,不包括图片css文件等等');
            })
            
            window.addEventListener('resize',function(){
                alert('浏览器窗口大小改变了');
            })
        </script>

效果图:1

2. 

 6.30

1.定时器

<span>5s后自动消失</span>
        <script type="text/javascript">
            // setTimeout 延迟多少毫秒后执行函数  仅执行一次
            // 1000毫秒等于1秒
            // var span = document.querySelector('span');
            // var time1 = setTimeout(function(){
            //     span.style.display = 'none';
            // },5000)
            // var time2 = setTimeout(function(){
            //     alert('5s到了');
            // },5000)
            
            // // 清除定时器
            // clearTimeout(time1);
            //注意 先设置定时器 才能设置清除
            
            
            // setInterval 每隔一段事件执行函数  会一直执行
            var i=0;
            // setInterval(function(){
            //     i++;
            //     console.log(i);
            // },1000)
            
            var myinterval =  setInterval(function(){
                i++;
                console.log(i);
            },1000)
            
            setTimeout(function(){
                clearInterval(myinterval);//清除定时器
            },5000)
             
        </script>

效果图:

2.倒计时效果

<body>
        <!-- 活动倒计时 -->
        <p>距离活动还剩<span>0</span> 天<span>0</span> 时<span>0</span> 分<span>0</span> 秒</p>
        <script>
            
            function showTime(){
                var spans = document.querySelectorAll('span');
                //设置活动截至的时间 的毫秒数
                var endTime = new Date('2022-07-03 14:00:00').getTime();
                console.log(endTime);
                var newTime = new Date().getTime();
                //获得现在到活动截至时 相差的秒数
                var diffTime = (endTime - newTime)/1000;
                console.log(diffTime);
                
                var day = parseInt(diffTime/60/60/24);
                   console.log(day);
                 var hours =parseInt(diffTime/60/60%24);
                 var minutes= parseInt(diffTime/60%60);
                 var seconds= parseInt(diffTime%60);
                    spans[0].innerText =day;
                  spans[1].innerText = hours;
                  spans[2].innerText = minutes;
                  spans[3].innerText = seconds;
            }
            
            //设置定时器
            setInterval(showTime,1000);
             
        </script>

效果图:

3.倒计时发送消息

<body>
        <input type="text">
        <input type="button" id="btn" value="发送信息">
        
        <script type="text/javascript">
            var btn = document.querySelector('#btn');
            btn.onclick = function(){
                //设置5秒倒计时
                var time = 5;
                var  setTime =  setInterval(function(){
                    
                    if(time==0){
                        //清理定时器
                        clearInterval(setTime);
                        btn.disabled = false;
                        btn.value = '发送信息';
                    }else{
                        //禁用按钮
                        btn.disabled = true;
                        // 将时间赋值给按钮
                        btn.value = time;
                        time--;
                    }
                    
                },1000)
            }
        </script>

效果图:

4.this指向问题

<body>
        <input type="button" name="" id="btn" value="点击执行" />
        
        <script type="text/javascript">
            // 01全局作用域下的this
            //再全局下 直接打印 this指向的是 窗口顶级对象window  
            console.log('全局:',this);
            function demo(){
                console.log('demo:',this);//window
                // 这里的函数 其实也是再全局下调用的 相当于window.demo()  所以打印的结果还是window
            }
            demo();



            // 02 对象里面的this 指向
            //通过字面量形式创建一个对象
            var person = {
                realname:'张三',
                age:20,
                say:function(){
                    console.log('说话');
                    console.log(this);//指向的是当前对象本身 person
                }
            };
            console.log(person.realname);
            person.say();
            
            // 03构造函数里面的this指向问题 
            function Person(realname,age){
                this.realname = realname;
                this.age = age;
                this.say = function(){
                    console.log('说话');
                    console.log(this);//构造函数里面的this 指向的是实例化的这个对象 
                    // 实例化指的是 new出来的实例
                }
            }
            var p1 = new Person('李四',22);
            var p2 = new Person('王武',23);
            p1.say();
            p2.say();
        //通过 01 02 03 总结 再普通函数里的this 通常指向是 那个调用它的对象
        // 即谁调用 this指向谁
        
        // 04 再定时器里面的this指向
        var btn= document.querySelector('#btn');
        btn.onclick = function(){
            console.log(this);//btn对象
            setTimeout(function(){
                console.log(this);//定时器 是window调用的 所以这里打印的是window
            },1000)
        }

效果图:

5.location对象

<body>
        <!-- location对象 -->
        <input type="button" name="" id="btn" value="点击跳转到百度" />
        <script>
            var btn = document.querySelector('#btn');
            btn.onclick = function(){
                //获得的是本地的路径地址 注意 路径中有中文时  中文会通过urlcode加密处理
                console.log(location.href);
                
                location.href = 'http://www.baidu.com';
            
                console.log(location.host);//获取域名
                console.log(location.port);//获取 端口号
                console.log(location.pathname);//获取路径
                console.log(location.hash);//获取锚链接信息
                
            }
        </script>

效果图:

6.小练习

<body>
        <form action="qn.html" method="get">
            <p>姓名:<input type="text" name="username" id="username" placeholder="请输入姓名" /></p>
            <p>年龄:<input type="text" name="age" id="age" placeholder="请输入年龄" /></p>
            <input type="submit" value="提交信息"/>
        </form>
        
    </body>

效果图:

7.1

1.js的执行机制

   <body>
        
        <script type="text/javascript">
            // console.log(1);
            // function demo(){
            //     console.log(2);
            // }
            
            // console.log(3);
            // //以上的代码 log1 2是主线程的 依次执行
            // log3是异步任务 它先进入任务队列中 等1  2执行完了 我们调用函数的时候 它才执行
            
            console.log(1);
            
            document.onclick =function(){
                console.log('click');
            }
            
            setTimeout(function(){
                console.log(3);
            },3000)
            
            console.log(2);
        </script>

2.location常见方法

<body>
        <input type="button" name="" id="btn" value="点击页面跳转" />
        <a href="javascript:;" οnclick="getreplace()">跳转qn页面</a>
        <a href="javascript:;" οnclick="getreload()">点击刷新页面</a>
        <script type="text/javascript">
            // location方法
            var btn = document.querySelector('#btn');
            btn.onclick = function(){
                //跳转页面
                location.assign('http://www.baidu.com');
            }
            //跳转页面后 无法后退
            function getreplace(){
             location.replace('qn.html');
            }
            //刷新页面
            function getreload(){
                location.reload();
            }
            
            // navigator对象可以判断 登陆的类型 移动端 还是网页端
            if((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))) {
                        console.log("手机端");
             } else {
                        console.log("PC端");
             }
        </script>

效果图:

7.4

1.登录框效果

.bg{
                width: 100%;
                height: 100%;
               position: fixed;
                top: 0px;
                left:0px;
                 background: rgb(0,0,0,.4);
                 z-index: 9998;
                 display: none;
            }
            .login{
                 width: 600px;
                 height: 300px;
                 position: fixed;
                 top:50%;
                left:50%;
                transform: translate(-50%,-50%);
                z-index: 9999;
                background: #fff;
                display: none;
                            
            }
            .title{
            height: 45px;
             line-height: 45px;
            text-align: center;
            border-bottom: 1px solid #DCDCDC;
            position: relative;
            cursor: move; 
            }
            .content p{
                 text-align: center;
                 line-height: 45px;
            }
            .title a{
                 display: block;
                 position: fixed;
                top:2px;
                 right: 5px;
                 z-index: 9999;
            }
        </style>
    </head>
    <body>
        <!-- 制作登录框 -->
        
         <a href="javascript:;" id="loginA">注册/登录</a>
        <!-- 登录弹框 -->
        <div class="login">
              <div class="title">
                  用户登录 <a href="javascript:;" id="close">关闭</a> 
                  
              </div> <div class="content">
                 <p> 用户名:<input type="text" value="" /></p>
                 <p>  密码:<input type="password" value="" /></p>
                  <p> <input type="button" value="提交" /></p>
              </div>
            
        </div>
        <div class="bg"></div>
        <script type="text/javascript">
            var loginA = document.querySelector('#loginA');
            var loginDiv = document.querySelector('.login');
            var close = document.querySelector('#close');
            var title = document.querySelector('.title');
            var bgDiv = document.querySelector('.bg');
            
            //显示登录框
            loginA.addEventListener('click',function(){
                loginDiv.style.display = 'block';
                bgDiv.style.display = 'block';
            })
            
            //隐藏登陆框
            close.addEventListener('click',function(){
                loginDiv.style.display = 'none';
                bgDiv.style.display = 'none';
            })
            
            //移动登录框
            //添加鼠标按下时事件 发生
            title.addEventListener('mousedown',function(e){
                //获得鼠标在登陆框上的位置
                //注意 offset获得的距离 不计算 translate偏移的距离 所以这里我们自己减去偏移的一半距离
                // var x =e.pageX - (loginDiv.offsetLeft-300);
                // var y = e.pageY - (loginDiv.offsetTop-150);
                // console.log(e.pageX,loginDiv.offsetLeft);
                // console.log(x,y);
                console.log(e.target)
                var x =e.pageX - (loginDiv.offsetLeft);
                var y = e.pageY - (loginDiv.offsetTop);
                
                //计算鼠标移动时 登陆框需要移动的距离
                document.addEventListener('mousemove',move);
                function move(e){
                    var newX = e.pageX - x;
                    var newY = e.pageY - y;
                    // loginDiv.style.left = newX +300+'px';
                    // loginDiv.style.top = newY +150+'px';
                    loginDiv.style.left = newX+'px';
                    loginDiv.style.top = newY+'px';
                }
                
                //清除 mousemove移动事件
                document.addEventListener('mouseup',function(){
                    document.removeEventListener('mousemove',move);
                })
                
            })
        </script>

效果图:1.

2.点击登录跳出登录框

3.鼠标进行点击事件进行拖移,登录框跟随鼠标进行移动

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值