✽js的快速入门6 项目

1. 待办

上方为输入事情添加

下左为未办,右边为已办 

<body>
    <h3>待办</h3>
    新事情:<input type="text" name="" id="event"/>
    <button onclick="addevent();">提交</button>
    <hr>
    <div>
        <table id="tab">
            <!-- js添加的事情 -->
        </table>
    </div>

    <div>
        <table id="tab2">

        </table>
    </div>
</body>
div{
            width: 45%;
            margin-left: 2%;
            float: left;
            border-top: 1px solid green;
        }
#tab,#tab2{
            border-collapse: collapse;
            width: 100%;
            /* margin: 0 auto; */
        }
tr{
            border-top: 1px solid green;
            border-bottom: 1px solid green;
        }
td{
            background-color: rgb(186, 255, 255);
        }
.td1{
            width: 5px;
        }
.td2{
            width: 510px;
            /* background-color: red; */
        }

先顺思路

1. 获取input的内容,按行添加进table中,每行前均加一个多选框

2. 多选框的值为真,将此行挪至右边

3. 取消右边多选框的勾,将其返回至左边

4. 增加一个删除链接

addevent函数写出一个tr行,【设置了3列,多选框,内容,单删除】,将此行头插进table,并删除input框中的内容(调动delinp函数)

第一列中附有moveture函数,当此框被选中时,将其挪至右边的table中;

第三列附有delthi函数,当被选中时进行单删

movetrue函数,利用this传进去的是多选框,所以要想上查找到父节点tr,在左边进行删除,在右边进行追加

delthis函数,同样利用this,找到父节点tr,获取tr的行号进行删除

function delinp(){ // 输出输入框中输入的内容
            document.getElementById('event').value='';
        }
function addevent(){
            var tr='<tr>'+
                '<td class="td1">'+
                    '<input type="checkbox" name="chk" onchange="movetrue(this);"/>'+
                '</td>'+
                '<td class="td2">'+
                    document.getElementById('event').value
                +'</td>'+
                '<td class="td3">'+
                    '<input type="radio" onclick="delthis(this);" />'+
                '</td>'+
            '</tr>'
            console.log(tr);
            var tab=document.getElementById('tab');
            trs=tab.insertRow(0);
            trs.innerHTML=tr;
            
            delinp();
        }
function movetrue(inp){
            var tab=document.getElementById('tab'); //获取父节点,删除子节点
            var tab2=document.getElementById('tab2');
            // console.log(inp.checked);
            var tr=inp.parentNode.parentNode; //获取该节点的父节点tr
            if(inp.checked){
                // 删除上面挪至下方
                
                tab.deleteRow(tr.rowIndex);
                tab2.appendChild(tr);
                console.log(tr.rowIndex);
            }else{
                // 将下方的挪至上方
                tab2.deleteRow(tr.rowIndex);
                tab.appendChild(tr);
            }
            
        }
function delthis(a){
            var tr=a.parentNode.parentNode;
            var tab=tr.parentNode;
            tab.deleteRow(tr.rowIndex);
        }

2. 大小轮播图

                                  

实现状态:

        当鼠标经过或悬停在某个小图上时,大图随之进行变化【图片如果大小合适,就不用向我一样写img的css】

#imgb{
            width: 200px;
            height: 200px;
        }
.imgs{
            border: 2px solid white;
            padding: 2px;
            width: 50px;
            height: 50px;
        }
#showdiv{
            /* border: 1px solid; */
            width: 210px;
            height: 270px;
            text-align: center;
            margin: 0 auto;
        }
<body>
    <script>
        function addborder(imgsl,src){
            imgsl.style.border='2px solid black';

            var big=document.getElementById('imgb');
            big.src=src;
        }
        function subborder(imgs){
            imgs.style.border='';
        }
    </script>
    <div id="showdiv">
        <img id="imgb" src="big1.png" alt="">
        <img class="imgs" src="small1.jpg" alt="" onmouseover="addborder(this,'big1.png');" onmouseleave="subborder(this);">
        <img class="imgs" src="small2.jpg" alt="" onmouseover="addborder(this,'big2.png');" onmouseleave="subborder(this);">
        <img class="imgs" src="small3.jpg" alt="" onmouseover="addborder(this,'big3.png');" onmouseleave="subborder(this);">
    </div>
</body>

 给每个小图加上鼠标经过时白色边框变成黑色边框,当离开后,将黑色边框变白【白色边框保证图片不会大小变】

利用this传递所指的img,并附带所匹配的大图路径

函数中:获取大图的src并进行更改【style为空时,会找最前优先级进行替补】

3. 隐藏的下拉菜单

鼠标经过时,下拉菜单出现,鼠标离开,下拉菜单消失【可不是指下拉菜单select】

思路:

        1. 设置一个div,里面包含div和ol>li

        2. 将ol设置为不可见,鼠标经过大div时,ol出现,鼠标离开后,ol消失

<div class="nav" id="box">
        <div>总体菜单</div>
        <ol class="dsy">
            <li><a href="#">菜单1</a></li>
            <li><a href="#">菜单2</a></li>
            <li><a href="#">菜单3</a></li>
            <li><a href="#">菜单4</a></li>
            <li><a href="#">菜单5</a></li>
        </ol>
    </div>
<style>
        *{
            padding: 0;
            margin: 0;
            list-style: none;
        }
        
        .nav{
            width: 100px;
            background-color: rgb(200, 255, 255);
            height: 40px;
            margin: 0 auto;
            margin-top: 30px;
        }
        .dsy{
            display: none;
        }
        ol>li{
            width: 100px;
            height: 40px;
            text-align: center;
            line-height: 40px;
            background-color: rgb(216, 255, 178);
            border: 1px solid rgb(117, 117, 117);
            /* float: left; */
            margin-right: 20px;
        }
    </style>

注意:ol的设置为display:none 

js就很简单了,只不过和前面有点不同,onmouseover写在了变量后,以后的写法基本就是这样,不再给html加事件,仅在js中完成【除特殊情况,例如】

var box=document.querySelector('#box');
var dsy=document.querySelector('.dsy');

box.onmouseover = function() {
            console.log('鼠标进入了');
            dsy.style.display = 'block';

        }

box.onmouseout = function() {
            console.log('鼠标离开了');
            dsy.style.display = 'none';
        }
4.  手机号验证码的倒计时

当倒计时结束后,重新变为发送,点击发送,开始倒计时

认识新函数querySelector:选取第一个匹配的元素;addEventListener:给某个元素添加监听器【同经常使用的这几个大致一样】

 还记得setInterval 和 clearInterval 吗 【设置间隔器和清除间隔器】

思路:        

        1. 获取按钮元素,并设置倒计时的时间

        2. 为按钮添加监听器,点击后按钮变为不可选中,并更改按钮颜色

        3.  设置一个间隔器,每隔1s执行一次,执行过程设置的倒计时自减,当time减为0,为其重新赋值并清除间隔器和不可选中属性

<body>
    手机号:<input type="number" placeholder="请输入我的手机号" /><button>send</button>
    <script>
        var btn=document.querySelector('button');
        var time=3;
        console.log('刷新页面就有');
        btn.addEventListener('click',function(){
        console.log('点击了');
        btn.disabled=true;
        btn.style.backgroundColor='gray';
        var tms=setInterval(function(){
            // 添加计时器,每隔1s执行一次
            if(time == 0){
                // 当3秒执行完成后,按钮不可点的状态取消
                clearInterval(tms);
                time=3;
                btn.disabled=false;
                btn.style.backgroundColor='';
                btn.innerHTML='发送';
            }else{
                // 当在3秒内时,time每隔1s进行自减操作
                btn.disabled=true;
                btn.innerHTML='还剩下'+time+'秒';
                time--;
            }
        },1000);
    })
    </script>
</body>
5. 留言添加与删除

点击发送,将内容移至下方并清空输入框的内容,点击删除,删除该条评论

<style>
        textarea{
            width: 200px;
            height: 50px;
            resize: none;
        }
        .sp{
            font-size: 8px;

        }
        .fons{
            font-size: 6px;
            font-weight: bold;
        }
</style>
<textarea></textarea>
    <button>send</button>
    <ul>

    </ul>
    <script>
        var btn=document.querySelector('button');
        var txt=document.querySelector('textarea');
        var ul=document.querySelector('ul');

        // 生成时间年月日时分
        var time=new Date();
        year=time.getFullYear();
        month=time.getMonth()+1;
        day=time.getDate();
        hour=time.getHours();
        minute=time.getMinutes();
        var tm=year+'-'+month+'-'+day+' '+hour+':'+minute;
        // console.log(tm);

        btn.onclick=function(){
            if(txt == ''){
                alert('没有输入东西');
                return;
            }else{
                
                var li=document.createElement('li');

                li.innerHTML=txt.value+' <span class="sp">'+tm+'</span>'+'<i class="fons">删除</i>';
                ul.insertBefore(li,ul.children[0]);
                
                li.children[1].onclick=function(){
                    ul.removeChild(this.parentNode);
                }
            }
            txt.value='';
        }
    </script>

思路:

        1. 获取各元素信息,并生成时间的字符串

        2. 检测输入的内容是否为空,为空则返回

        3. 不为空则生成子节点(li),为li节点加上时间与删除字样,进行插入节点

        4. 当点击到li子节点的【i】 删除,对li进行移除

注意:getMonth() 比当前月份少1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值