15-作业案例

十五.作业案例

  • 自定义多选框

需求:

  1. 当鼠标点击要选择的选项框,即勾选上,也可以取消;
  2. 点击全选按钮,全部勾选上;
  3. 点击反选按钮,取消已勾选的;
<!DOCTYPE html>
<html lang="zh-cn">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    *{margin:0;padding:0;font-family:"Microsoft Yahei";
      user-select: none;
    }
    #wrap{
      width: 300px;
      padding: 15px 0;
      border: 1px solid #999;
      border-radius: 10px;
      margin: 50px auto;
    }
    #wrap ul li{
      list-style: none;
      width: 100%;
      height: 50px;
      line-height: 50px;
      color: #fff;
      font-size: 14px;
      text-indent: 80px;
      cursor: pointer;
      background: url("./img/ckbg1.jpg") no-repeat 20px center;
    }

    #wrap ul li.checked{
      background-image: url("./img/ckbg2.jpg");
      text-indent: 55px;
    }

    #wrap ul li:nth-child(4n+1){
      background-color: #000;
    }
    #wrap ul li:nth-child(4n+2){
      background-color: #333;
    }
    #wrap ul li:nth-child(4n+3){
      background-color: #666;
    }
    #wrap ul li:nth-child(4n+4){
      background-color: #999;
    }
    #wrap .btn{
      height: 50px;
      line-height: 50px;
    }
    #wrap .btn .all,#wrap .btn .reverse{
      float: left;
      cursor: pointer;
    }
    #wrap .btn .all{
      text-indent: 65px;
      background: url("./img/ckbg1.jpg") no-repeat 35px center;
    }
    #wrap .btn .all.checked{
      background-image: url("./img/ckbg2.jpg");
    }
    #wrap .btn .reverse{
      margin-left: 80px;
    }
  </style>
</head>
<body>
  <div id="wrap">
    <ul>
      <li>薄荷</li>
      <li>皮卡</li>
      <li>bohe</li>
      <li>mint</li>
      <li>pika</li>
      <li>志远</li>
      <li>小希</li>
      <li>伟哥</li>
    </ul>
    <div class="btn">
      <div class="all">全选</div>
      <div class="reverse">反选</div>
    </div>
  </div>
  <script>

    //每一个功能用一个单独的作用域包装起来
    (function(){

      let aLi = document.querySelectorAll("#wrap ul li"),
        oAll = document.querySelector("#wrap .btn .all"),
        oReverse = document.querySelector("#wrap .btn .reverse"),
        len = aLi.length,
        num = 0
      ;

      //检测当前计数器,以决定oAll是否要加名字
      function allName(){
        if (num === len){
          oAll.classList.add("checked");
        }else{
          oAll.classList.remove("checked");
        }
      }

      //li的点击事件
      for (let i=0;i<len;i++){
        aLi[i].onclick = function(){
          //操作自己的名字
          this.classList.toggle("checked");

          //计算计数器
          // num += this.classList.contains("checked")?1:-1;
          if (this.classList.contains("checked")){
            num ++;
          }else{
            num --;
          }

          //执行all名字的修改
          allName();
        };
      }

      //全选按钮的点击
      oAll.onclick = function(){

        //改变自己的名字
        this.classList.toggle("checked");

        //根据当前名字决定所有li的选中状态
        let x = this.classList.contains("checked")?"add":"remove";
        for (let i=0;i<len;i++){
          aLi[i].classList[x]("checked");
        }

        //改变计数器
        num = this.classList.contains("checked")*len;
      };

      //反选按钮的点击、
      oReverse.onclick = function(){
        for (let i=0;i<len;i++){
          aLi[i].classList.toggle("checked");
        }

        //改变num
        num = len - num;

        //检测all的全选状态
        allName();
      };
      
    })();
  </script>
</body>
</html>

img

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PilJB0oR-1615793442172)(C:/Users/%E7%AB%B9%E9%9D%92%E6%9A%AE%E9%9B%A8/AppData/Roaming/Typora/typora-user-images/1590025749082.png)]

  • 选项卡

需求:

  1. 鼠标滑过想要查看的呢容显示对应的页面图片,同时显示选项卡下方的红色下滑线特效
<!DOCTYPE HTML>
<html>
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <meta name="keywords" content="">
  <meta name="description" content="">
  <meta name="author" content="">
  <style>
    body{font-family: "Microsoft YaHei",serif;}
    body,dl,dd,p,h1,h2,h3,h4,h5,h6{margin:0;}
    ol,ul,li{margin:0;padding:0;list-style:none;}
    img{border:none;}

    #wrap{
      width: 1080px;
      height: 350px;
      margin: 50px auto;
    }

    #wrap .nav{
      position: relative;
      width: 100%;
      height: 40px;
      background-color: #f5f5f5;
      line-height: 40px;
      font-size: 14px;
    }
    #wrap .nav p{
      position: absolute;
      top: 0;
      left: 0;
      width: 130px;
      height: 40px;
      background-color: #000;
      color: #fff;
      text-align: center;
    }
    #wrap .nav ul{
      box-sizing: border-box;
      width: 100%;
      padding-left: 200px;
    }
    #wrap .nav ul li{
      position: relative;
      float: left;
      margin-right: 32px;
      cursor: pointer;
      transition: color .3s;
    }
    #wrap .nav ul li:hover{
      color: #db3a45;
    }
    #wrap .nav ul li::after{
      position: absolute;
      left: 0;
      right: 0;
      bottom: 0;
      content: "";
      width: 0%;
      height: 2px;
      margin: auto;
      background-color: #db3a45;
      transition: width .3s;
    }
    #wrap .nav ul li.active::after{
      width: 100%;
    }
    #wrap .content{
      width: 100%;
      height: 255px;
      margin-top: 20px;
    }
    #wrap .content>ul{
      position: relative;
      width: 100%;
      height: 100%;
    }
    #wrap .content>ul li.first{
      display: none;
      overflow: hidden;
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
    }
    #wrap .content>ul li.first.show{
      display: block;
    }
    #wrap .content>ul li.first ul{
      width: 150%;
    }
    #wrap .content>ul li.first ul li{
      float: left;
      width: 340px;
      height: 255px;
      margin-right: 20px;
    }
  </style>
</head>
<body>
  <div id="wrap">
    <div class="nav">
      <p class="title">独家精品策划</p>
      <ul>
        <li class="active">全部</li>
        <li>列表一6666</li>
        <li>列表二5254</li>
        <li>列表三000</li>
        <li>列表四333</li>
      </ul>
    </div>

    <div class="content">
      <ul>
        <li class="first show">
          <ul>
            <li class="second"><img src="img2/1.jpg" alt=""></li>
            <li class="second"><img src="img2/2.jpg" alt=""></li>
            <li class="second"><img src="img2/3.jpg" alt=""></li>
          </ul>
        </li>
        <li class="first">
          <ul>
            <li class="second"><img src="img2/4.jpg" alt=""></li>
            <li class="second"><img src="img2/5.jpg" alt=""></li>
            <li class="second"><img src="img2/6.jpg" alt=""></li>
          </ul>
        </li>
        <li class="first">
          <ul>
            <li class="second"><img src="img2/7.jpg" alt=""></li>
            <li class="second"><img src="img2/8.jpg" alt=""></li>
            <li class="second"><img src="img2/9.jpg" alt=""></li>
          </ul>
        </li>
        <li class="first">
          <ul>
            <li class="second"><img src="img2/10.jpg" alt=""></li>
            <li class="second"><img src="img2/11.jpg" alt=""></li>
            <li class="second"><img src="img2/12.jpg" alt=""></li>
          </ul>
        </li>
        <li class="first">
          <ul>
            <li class="second"><img src="img2/3.jpg" alt=""></li>
            <li class="second"><img src="img2/10.jpg" alt=""></li>
            <li class="second"><img src="img2/4.jpg" alt=""></li>
          </ul>
        </li>
      </ul>
    </div>
  </div>

  <script>
    (function(){

      let aNavLi = document.querySelectorAll(".nav ul li"),
        len = aNavLi.length,
        aContentLi = document.querySelectorAll(".content ul li.first")
      ;

      for (let i=0;i<len;i++){
        aNavLi[i].onmouseenter = function(){

          for (let j=0;j<len;j++){
            aNavLi[j].classList.remove("active");
            aContentLi[j].classList.remove("show");
          }

          this.classList.add("active");
          aContentLi[i].classList.add("show");
        };
      }


    })();
  </script>
</body>
</html>
1590026252723

效果图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QYilEdQK-1615793442176)(C:/Users/%E7%AB%B9%E9%9D%92%E6%9A%AE%E9%9B%A8/AppData/Roaming/Typora/typora-user-images/1590026286397.png)]

  • 全选与反选-皮卡版
<!doctype html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>全选与反选</title>
</head>
<body>
<input id="btn1" type="button" value="全选"/>
<input id="btn2" type="button" value="不选"/>
<input id="btn3" type="button" value="反选"/>
<div id="div1">
    <input type="checkbox"/>人生若只如初见<br>
    <input type="checkbox"/>何事秋风悲画扇<br>
    <input type="checkbox"/>等闲变却故人心<br>
    <input type="checkbox"/>却道故人心易变<br>
    <input type="checkbox"/>骊山语罢清宵半<br>
    <input type="checkbox"/>泪雨霖铃终不怨<br>
    <input type="checkbox"/>何如薄幸锦衣郎<br>
    <input type="checkbox"/>比翼连枝当日愿<br>

</div>

<script>
	function pika() {
		let oBtn1 = document.getElementById('btn1'),
			oBtn2 = document.getElementById('btn2'),
			oBtn3 = document.getElementById('btn3'),
			oDiv = document.getElementById('div1'),
			aCh = oDiv.getElementsByTagName('input');

		oBtn1.onclick = function () {
			for (let i = 0; i < aCh.length; i++) {
				aCh[i].checked = true;
			}
		};

		oBtn2.onclick = function () {
			for (let i = 0; i < aCh.length; i++) {
				aCh[i].checked = false;
			}
		};

		oBtn3.onclick = function () {
			for (let i = 0; i < aCh.length; i++) {
				if (aCh[i].checked == true) {
					aCh[i].checked = false
				} else {
					aCh[i].checked = true;
				}

			}
		}
	}

	pika();
</script>

</body>
</html>
  • 鼠标过相对应的图片-皮卡版
<!DOCTYPE HTML>
<html>
<head>
    <meta charset="UTF-8">
    <title>鼠标滑过显示对应的图片</title>
    <style>
       *{
           margin: 0;
           padding: 0;
           list-style: none;
       }

        img {
            border: none;
        }

        #wrap {
            width: 1080px;
            height: 350px;
            margin: 50px auto;
        }

        #wrap .nav {
            position: relative;
            width: 100%;
            height: 40px;
            background-color: #f5f5f5;
            line-height: 40px;
            font-size: 14px;
        }

        #wrap .nav p {
            position: absolute;
            top: 0;
            left: 0;
            width: 130px;
            height: 40px;
            background-color: #000;
            color: #fff;
            text-align: center;
        }

        #wrap .nav ul {
            box-sizing: border-box;
            width: 100%;
            padding-left: 200px;
        }

        #wrap .nav ul li {
            position: relative;
            float: left;
            margin-right: 32px;
            cursor: pointer;
            transition: color .3s;
        }

        #wrap .nav ul li:hover {
            color: #db3a45;
        }

        #wrap .nav ul li::after {
            position: absolute;
            left: 0;
            right: 0;
            bottom: 0;
            content: "";
            width: 0%;
            height: 2px;
            margin: auto;
            background-color: #db3a45;
            transition: width .3s;
        }

        #wrap .nav ul li.active::after {
            width: 100%;
        }

        #wrap .content {
            width: 100%;
            height: 255px;
            margin-top: 20px;
        }

        #wrap .content > ul {
            position: relative;
            width: 100%;
            height: 100%;
        }

        #wrap .content > ul li.first {
            display: none;
            overflow: hidden;
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
        }

        #wrap .content > ul li.first.show {
            display: block;
        }

        #wrap .content > ul li.first ul {
            width: 150%;
        }

        #wrap .content > ul li.first ul li {
            float: left;
            width: 340px;
            height: 255px;
            margin-right: 20px;
        }
    </style>
</head>
<body>
<div id="wrap">
    <div class="nav">
        <p class="title">独家精品策划</p>
        <ul>
            <li class="active">全部</li>
            <li>列表一</li>
            <li>列表二</li>
            <li>列表三</li>
            <li>列表四</li>
        </ul>
    </div>

    <div class="content">
        <ul>
            <li class="first show">
                <ul>
                    <li class="second"><img src="images/1.jpg" alt=""></li>
                    <li class="second"><img src="images/2.jpg" alt=""></li>
                    <li class="second"><img src="images/3.jpg" alt=""></li>
                </ul>
            </li>
            <li class="first">
                <ul>
                    <li class="second"><img src="images/4.jpg" alt=""></li>
                    <li class="second"><img src="images/5.jpg" alt=""></li>
                    <li class="second"><img src="images/6.jpg" alt=""></li>
                </ul>
            </li>
            <li class="first">
                <ul>
                    <li class="second"><img src="images/7.jpg" alt=""></li>
                    <li class="second"><img src="images/8.jpg" alt=""></li>
                    <li class="second"><img src="images/9.jpg" alt=""></li>
                </ul>
            </li>
            <li class="first">
                <ul>
                    <li class="second"><img src="images/10.jpg" alt=""></li>
                    <li class="second"><img src="images/11.jpg" alt=""></li>
                    <li class="second"><img src="images/12.jpg" alt=""></li>
                </ul>
            </li>
            <li class="first">
                <ul>
                    <li class="second"><img src="images/13.jpg" alt=""></li>
                    <li class="second"><img src="images/14.jpg" alt=""></li>
                    <li class="second"><img src="images/15.jpg" alt=""></li>
                </ul>
            </li>
        </ul>
    </div>
</div>

<script>
	let Afirst=document.querySelectorAll('.content>ul>li');
	let Alist=document.querySelectorAll('.nav li');
	for (let i = 0; i < Alist.length; i++) {
		Alist[i].onmouseenter=function(){
			for (let j = 0; j < Alist.length; j++) {
				Alist[j].classList.remove('active');
			}
			for (let j = 0; j < Afirst.length; j++) {
				Afirst[j].classList.remove('show');
			}
			Alist[i].classList.add('active');
			Afirst[i].classList.add('show');
		}
	}
</script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值