1. 新浪tab栏

  1. <style>
  2. * {
  3. margin: 0;
  4. padding: 0;
  5. }
  6. li {
  7. list-style-type: none;
  8. }
  9. .tab {
  10. width: 978px;
  11. margin: 100px auto;
  12. }
  13. .tab_list {
  14. height: 39px;
  15. border: 1px solid #ccc;
  16. background-color: #f1f1f1;
  17. border-bottom: 3px solid #c81623;
  18. vertical-align: bottom;
  19. }
  20. .tab_list li {
  21. float: left;
  22. height: 39px;
  23. line-height: 39px;
  24. padding: 0 20px;
  25. text-align: center;
  26. cursor: pointer;
  27. }
  28. .tab_list .current {
  29. background-color: #c81623;
  30. color: #fff;
  31. }
  32. .item_info {
  33. padding: 20px 0 0 20px;
  34. }
  35. .item {
  36. display: none;
  37. }
  38. </style>
  39. </head>
  40. <body>
  41. <div class="tab">
  42. <div class="tab_list">
  43. <ul>
  44. <li class="current">商品介绍</li>
  45. <li>规格与包装</li>
  46. <li>售后保障</li>
  47. <li>商品评价(50000)</li>
  48. <li>手机社区</li>
  49. </ul>
  50. </div>
  51. <div class="tab_con">
  52. <div class="item" style="display: block;">
  53. 商品介绍模块内容
  54. </div>
  55. <div class="item">
  56. 规格与包装模块内容
  57. </div>
  58. <div class="item">
  59. 售后保障模块内容
  60. </div>
  61. <div class="item">
  62. 商品评价(50000)模块内容
  63. </div>
  64. <div class="item">
  65. 手机社区模块内容
  66. </div>
  67. </div>
  68. </div>
  69. <script>
  70. //获取元素
  71. var lis = document.querySelector('.tab_list').querySelectorAll('li')
  72. var items = document.getElementsByClassName('item');
  73. console.log(lis,items);
  74. //给每个li添加新属性和事件
  75. for (let i = 0; i < lis.length; i++) {
  76. lis[i].index=i; //这个用来给添加的新属性赋值
  77. lis[i].onclick=function(){
  78. //循环清空所有标签样式
  79. for (let i = 0; i < lis.length; i++) {
  80. lis[i].className='';
  81. // 所有div盒子隐藏
  82. items[i].style.display='none'
  83. }
  84. //设置点击时的标签样式
  85. lis[i].className='current'
  86. //将对应的div标签显示出来
  87. var index=this.index;
  88. items[index].style.display='block'
  89. }
  90. }
  91. // // 获取元素
  92. // var tab_list = document.querySelector('.tab_list');
  93. // var lis = tab_list.querySelectorAll('li');
  94. // var items = document.querySelectorAll('.item');
  95. // // for循环绑定点击事件
  96. // for (var i = 0; i < lis.length; i++) {
  97. // // 开始给5个小li 设置索引号
  98. // lis[i].setAttribute('index', i);
  99. // lis[i].onclick = function() {
  100. // // 1. 上的模块选项卡,点击某一个,当前这一个底色会是红色,其余不变(排他思想) 修改类名的方式
  101. // // 干掉所有人 其余的li清除 class 这个类
  102. // for (var i = 0; i < lis.length; i++) {
  103. // lis[i].className = '';
  104. // }
  105. // // 留下我自己
  106. // this.className = 'current';
  107. // // 2. 下面的显示内容模块
  108. // var index = this.getAttribute('index');
  109. // console.log(index);
  110. // // 干掉所有人 让其余的item 这些div 隐藏
  111. // for (var i = 0; i < items.length; i++) {
  112. // items[i].style.display = 'none';
  113. // }
  114. // // 留下我自己 让对应的item 显示出来
  115. // items[index].style.display = 'block';
  116. // }
  117. // }
  118. </script>

2. 表格隔行变色

  1. <style>
  2. table {
  3. width: 800px;
  4. margin: 100px auto;
  5. text-align: center;
  6. border-collapse: collapse;
  7. font-size: 14px;
  8. }
  9. thead tr {
  10. height: 30px;
  11. background-color: skyblue;
  12. }
  13. tbody tr {
  14. height: 30px;
  15. }
  16. tbody td {
  17. border-bottom: 1px solid #d7d7d7;
  18. font-size: 12px;
  19. color: blue;
  20. }
  21. .bg {
  22. background-color: rgb(78, 227, 247);
  23. }
  24. </style>
  25. </head>
  26. <body>
  27. <table>
  28. <thead>
  29. <tr>
  30. <th>代码</th>
  31. <th>名称</th>
  32. <th>最新公布净值</th>
  33. <th>累计净值</th>
  34. <th>前单位净值</th>
  35. <th>净值增长率</th>
  36. </tr>
  37. </thead>
  38. <tbody>
  39. <tr>
  40. <td>003526</td>
  41. <td>农银金穗3个月定期开放债券</td>
  42. <td>1.075</td>
  43. <td>1.079</td>
  44. <td>1.074</td>
  45. <td>+0.047%</td>
  46. </tr>
  47. <tr>
  48. <td>003526</td>
  49. <td>农银金穗3个月定期开放债券</td>
  50. <td>1.075</td>
  51. <td>1.079</td>
  52. <td>1.074</td>
  53. <td>+0.047%</td>
  54. </tr>
  55. <tr>
  56. <td>003526</td>
  57. <td>农银金穗3个月定期开放债券</td>
  58. <td>1.075</td>
  59. <td>1.079</td>
  60. <td>1.074</td>
  61. <td>+0.047%</td>
  62. </tr>
  63. <tr>
  64. <td>003526</td>
  65. <td>农银金穗3个月定期开放债券</td>
  66. <td>1.075</td>
  67. <td>1.079</td>
  68. <td>1.074</td>
  69. <td>+0.047%</td>
  70. </tr>
  71. <tr>
  72. <td>003526</td>
  73. <td>农银金穗3个月定期开放债券</td>
  74. <td>1.075</td>
  75. <td>1.079</td>
  76. <td>1.074</td>
  77. <td>+0.047%</td>
  78. </tr>
  79. <tr>
  80. <td>003526</td>
  81. <td>农银金穗3个月定期开放债券</td>
  82. <td>1.075</td>
  83. <td>1.079</td>
  84. <td>1.074</td>
  85. <td>+0.047%</td>
  86. </tr>
  87. </tbody>
  88. </table>
  89. <script>
  90. let trs = document.querySelector('tbody').querySelectorAll('tr')
  91. for (let i = 0; i < trs.length; i++) {
  92. trs[i].onmouseover = function(){
  93. for (let i = 0; i < trs.length; i++) {
  94. trs[i].className=""
  95. }
  96. trs[i].className = 'bg'
  97. }
  98. trs[i].onmouseout = function(){
  99. trs[i].className=''
  100. }
  101. }
  102. </script>

3. 多选框全选

    <style>
        table{
            position: absolute;
            right: 0;
            left: 0;
            top: 0;
            bottom: 0;
            width: 300px;
            height: 100px;
            margin: auto;
            text-align: center;
            line-height: 25px;
            border: 1px solid #ccc;
            border-collapse:collapse
        }
        tr{
            background-color: #ebdddd;
        }
        td{
            font-family: 幼圆;
        }
        tr th{
            background-color: rgb(228, 129, 122);
            color: #fff;
            font-weight: normal;
        }
        input{
            background-color: transparent;
        }
        .color{
            background-color: rgb(206, 168, 173);
        }
    </style>
</head>
<body>
    <div class="warp">
        <table border="1px" cellspacing=0>
            <thead>
                <tr>
                    <th><input type="checkbox" id="all-In"></th>
                    <th>全部目标</th>
                    <th>悬赏</th>
                </tr>
            </thead>
                <tbody id="JPSS">
                <tr>
                    <td><input type="checkbox"></td>
                    <td>熊本君</td>
                    <td>5000$</td>
                </tr>
                <tr>
                    <td><input type="checkbox"></td>
                    <td>巴桑</td>
                    <td>3000¥</td>
                </tr>
                <tr>
                    <td><input type="checkbox"></td>
                    <td>kevin桑</td>
                    <td>300$</td>
                </tr>
                <tr>
                    <td><input type="checkbox"></td>
                    <td>江本一郎</td>
                    <td>600¥</td>
                </tr>
            </tbody>

        </table>
    </div>
    <script>
        var all = document.querySelector('#all-In');
        var jPs = document.getElementById('JPSS').getElementsByTagName('input');
        var trs = document.querySelector('tbody').querySelectorAll('tr')
        console.log(jPs,all);
        //设置全选按钮的事件
            all.onclick = function(){
                for( let i = 0;i < jPs.length; i++){
                    jPs[i].checked = this.checked;  //将全选的状态给每一个子选项
                }
            }
                for(let i = 0 ; i < jPs.length;i++){
                    jPs[i].onclick = function(){
                        // var sure=0
                        for(let i=0;i<jPs.length;i++){
                            if(!jPs[i].checked){ //当有一个没有选中时
                                //  sure =1    
                                 all.checked=false;             // 全选不会选中
                                break;
                            } all.checked=true
                        }
                        // if(sure==0){    
                            // all.checked=true
                        // }else{
                            // all.checked=false;  
                        // }
                    }
                }
                //隔行变色
                for (let i = 0; i < trs.length; i++) {
            trs[i].onmouseover = function(){
                for (let i = 0; i < trs.length; i++) {
                    trs[i].className=""
                }
                trs[i].className = 'color'
            }
            trs[i].onmouseout = function(){
                trs[i].className=''
            }
        }
    </script>

4. 简单计算器

  <body>
    <input type="text" id="num1" placeholder="请输入第一个数" />
    <input type="text" id="num2" placeholder="请输入第二个数" />
    <select name="" id="type">
      <option value="1">+</option>
      <option value="2">-</option>
      <option value="3">x</option>
      <option value="4">/</option>
      <option value="5">%</option>
    </select>
    <button>计算</button>
    <span id="result"></span>
    <script>
        var btn = document.querySelector("button");  //获取按钮元素
        var sum;   
      btn.onclick = function () {       
      var myselect = document.getElementById("type"); //点击时获取下拉菜单
      var x = document.getElementById("num1").value-0;//获取第一个框内元素
      var y = document.getElementById("num2").value-0;//获取第二个框内元素     
      var index = myselect.selectedIndex;              //获取下拉菜单的索引
      var num = myselect.options[index].value-0;       //通过索引获取value值
      //上面拿到的数据都是字符串型,需要手动改为数字型
      //拿到选中项的索引
      // for (i = 0; i < myselect.length; i++) {
      //   //下拉框的长度就是它的选项数.
      //   if (myselect[i].selected == true) {
      //     var text = myselect[i].value; //获取当前选择项的文本.
      //     break;
      //   }
      // } 
      // console.log(num);
       switch(num){
         case 1:
            sum=(x+y);
           break;
          case 2:
          sum=( x-y); 
            break;
          case 3:
            sum=(x*y) ;
            break
          case 4:
          sum=(x/y) ;
            break;
          case 5:
         sum=(x%y);
            break;
       }
       alert('值为'+sum) 
      }; 
    </script>
  </body>

5.动态生成表格

 <style>
        table {
            width: 500px;
            margin: 100px auto;
            border-collapse: collapse;
            text-align: center;
        }

        td,
        th {
            border: 1px solid #333;
        }

        thead tr {
            height: 40px;
            background-color: #ccc;
        }
    </style>
</head>

<body>

    <table cellspacing="0">
        <thead>
            <tr>
                <th>姓名</th>
                <th>科目</th>
                <th>成绩</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>

        </tbody>
    </table>
    <script>
        // 1.先去准备好学生的数据
        var datas = [{
            name: '魏璎珞',
            subject: 'JavaScript',
            score: 100
        }, {
            name: '弘历',
            subject: 'JavaScript',
            score: 98
        }, {
            name: '傅恒',
            subject: 'JavaScript',
            score: 99
        }, {
            name: '明玉',
            subject: 'JavaScript',
            score: 88
        }, {
            name: '大猪蹄子',
            subject: 'JavaScript',
            score: 0
        }];
        //生成表格
        var tbody = document.querySelector('tbody')
        // 根据行数来创建表格
       for (let i = 0; i < datas.length; i++) {
        //创建一个tr
        var tr = document.createElement('tr');
        //插入到tbody里
        tbody.appendChild(tr);
        // 给每个tr创建td,根据每个对象的属性数量创建单元格
        for (const k in datas[i]) {
           var td =document.createElement('td')
           tr.appendChild(td);
            // 将数据传给td
           td.innerHTML=datas[i][k]  
            }
            // 添加删除
            var td = document.createElement('td');
            // 将最后一个td添加到tr里
            tr.appendChild(td)
            // td里添加a标签
            td.innerHTML='<a href="javascript:;">删除</a>';
            // 设置a标签的事件
            td.children[0].onclick = function(){
                tbody.removeChild(this.parentElement.parentElement);
            }
        }    
        </script>

6.模态框

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .login-header {
        width: 100%;
        text-align: center;
        height: 30px;
        font-size: 24px;
        line-height: 30px;
      }

      ul,
      li,
      ol,
      dl,
      dt,
      dd,
      div,
      p,
      span,
      h1,
      h2,
      h3,
      h4,
      h5,
      h6,
      a {
        padding: 0px;
        margin: 0px;
      }

      .login {
        display: none;
        width: 512px;
        height: 280px;
        position: fixed;
        border: #ebebeb solid 1px;
        left: 50%;
        top: 50%;
        background: #ffffff;
        box-shadow: 0px 0px 20px #ddd;
        z-index: 9999;
        transform: translate(-50%, -50%);
      }

      .login-title {
        width: 100%;
        margin: 10px 0px 0px 0px;
        text-align: center;
        line-height: 40px;
        height: 40px;
        font-size: 18px;
        position: relative;
        cursor: move;
      }

      .login-input-content {
        margin-top: 20px;
      }

      .login-button {
        width: 50%;
        margin: 30px auto 0px auto;
        line-height: 40px;
        font-size: 14px;
        border: #ebebeb 1px solid;
        text-align: center;
      }

      .login-bg {
        display: none;
        width: 100%;
        height: 100%;
        position: fixed;
        top: 0px;
        left: 0px;
        background: rgba(0, 0, 0, 0.3);
      }

      a {
        text-decoration: none;
        color: #000000;
      }

      .login-button a {
        display: block;
      }

      .login-input input.list-input {
        float: left;
        line-height: 35px;
        height: 35px;
        width: 350px;
        border: #ebebeb 1px solid;
        text-indent: 5px;
      }

      .login-input {
        overflow: hidden;
        margin: 0px 0px 20px 0px;
      }

      .login-input label {
        float: left;
        width: 90px;
        padding-right: 10px;
        text-align: right;
        line-height: 35px;
        height: 35px;
        font-size: 14px;
      }

      .login-title span {
        position: absolute;
        font-size: 12px;
        right: -20px;
        top: -30px;
        background: #ffffff;
        border: #ebebeb solid 1px;
        width: 40px;
        height: 40px;
        border-radius: 20px;
      }
    </style>
  </head>

  <body>
    <div class="login-header"><a id="link" href="javascript:;">点击,弹出登录框</a></div>
    <div id="login" class="login">
      <div id="title" class="login-title">
        登录会员
        <span><a id="closeBtn" href="javascript:void(0);" class="close-login">关闭</a></span>
      </div>
      <div class="login-input-content">
        <div class="login-input">
          <label>用户名:</label>
          <input type="text" placeholder="请输入用户名" name="info[username]" id="username" class="list-input" />
        </div>
        <div class="login-input">
          <label>登录密码:</label>
          <input type="password" placeholder="请输入登录密码" name="info[password]" id="password" class="list-input" />
        </div>
      </div>
      <div id="loginBtn" class="login-button"><a href="javascript:void(0);" id="login-button-submit">登录会员</a></div>
    </div>
    <!-- 遮盖层 -->
    <div id="bg" class="login-bg"></div>
    <!-- script开始-->
    <script>
        // 获取元素
        var login = document.querySelector('.login'),
            link = document.querySelector('#link'),
            close = document.querySelector('#closeBtn'),
            bg = document.querySelector('#bg');
            //开始设置开关遮盖层
            link.addEventListener('click',()=>{
                login.style.display='block'
                bg.style.display='block'
            })
            close.addEventListener('click',()=>{
                login.style.display='none'
                bg.style.display='none'
            })
            //拖动登录框
            var title = document.querySelector('#title');
            // 设置点击事件
            title.addEventListener('mousedown',(e)=>{
                var x = e.pageX-login.offsetLeft;
                var y = e.pageY-login.offsetTop;
                console.log(x,y); 
                鼠标按下移动时事件
                document.onmousemove = (e)=>{
                     login.style.left=e.pageX-x+'px'
                    login.style.top=e.pageY-y+'px'
                }
               //松开鼠标按键取消拖动
                title.onmouseup=()=>{
                    document.onmousemove='null'
                }
            }) 
    </script>
  </body>
</html>

7.网页轮播图

轮播图也称为焦点图,是网页中比较常见的网页特效。
功能需求:

  1. 鼠标经过轮播图模块,左右按钮显示,离开隐藏左右按钮。
  2. 点击右侧按钮一次,图片往左播放一张,以此类推,左侧按钮同理。
  3. 图片播放的同时,下面小圆圈模块跟随一起变化。
  4. 点击小圆圈,可以播放相应图片。
  5. 鼠标不经过轮播图,轮播图也会自动播放图片。
  6. 鼠标经过,轮播图模块, 自动播放停止。
window.addEventListener('load', function() {
    // 1. 获取元素
    var arrow_l = document.querySelector('.arrow-l');
    var arrow_r = document.querySelector('.arrow-r');
    var focus = document.querySelector('.focus');
    var focusWidth = focus.offsetWidth;
    // 2. 鼠标经过focus 就显示隐藏左右按钮
    focus.addEventListener('mouseenter', function() {
        arrow_l.style.display = 'block';
        arrow_r.style.display = 'block';
        clearInterval(timer);
        timer = null; // 清除定时器变量
    });
    focus.addEventListener('mouseleave', function() {
        arrow_l.style.display = 'none';
        arrow_r.style.display = 'none';
        timer = setInterval(function() {
            //手动调用点击事件
            arrow_r.click();
        }, 2000);
    });
    // 3. 动态生成小圆圈  有几张图片,我就生成几个小圆圈
    var ul = focus.querySelector('ul');
    var ol = focus.querySelector('.circle');
    // console.log(ul.children.length);
    for (var i = 0; i < ul.children.length; i++) {
        // 创建一个小li 
        var li = document.createElement('li');
        // 记录当前小圆圈的索引号 通过自定义属性来做 
        li.setAttribute('index', i);
        // 把小li插入到ol 里面
        ol.appendChild(li);
        // 4. 小圆圈的排他思想 我们可以直接在生成小圆圈的同时直接绑定点击事件
        li.addEventListener('click', function() {
            // 干掉所有人 把所有的小li 清除 current 类名
            for (var i = 0; i < ol.children.length; i++) {
                ol.children[i].className = '';
            }
            // 留下我自己  当前的小li 设置current 类名
            this.className = 'current';
            // 5. 点击小圆圈,移动图片 当然移动的是 ul 
            // ul 的移动距离 小圆圈的索引号 乘以 图片的宽度 注意是负值
            // 当我们点击了某个小li 就拿到当前小li 的索引号
            var index = this.getAttribute('index');
            // 当我们点击了某个小li 就要把这个li 的索引号给 num  
            num = index;
            // 当我们点击了某个小li 就要把这个li 的索引号给 circle  
            circle = index;
            // num = circle = index;
            console.log(focusWidth);
            console.log(index);

            animate(ul, -index * focusWidth);
        })
    }
    // 把ol里面的第一个小li设置类名为 current
    ol.children[0].className = 'current';
    // 6. 克隆第一张图片(li)放到ul 最后面
    var first = ul.children[0].cloneNode(true);
    ul.appendChild(first);
    // 7. 点击右侧按钮, 图片滚动一张
    var num = 0;
    // circle 控制小圆圈的播放
    var circle = 0;
    // flag 节流阀
    var flag = true;
    arrow_r.addEventListener('click', function() {
        if (flag) {
            flag = false; // 关闭节流阀
            // 如果走到了最后复制的一张图片,此时 我们的ul 要快速复原 left 改为 0
            if (num == ul.children.length - 1) {
                ul.style.left = 0;
                num = 0;
            }
            num++;
            animate(ul, -num * focusWidth, function() {
                flag = true; // 打开节流阀
            });
            // 8. 点击右侧按钮,小圆圈跟随一起变化 可以再声明一个变量控制小圆圈的播放
            circle++;
            // 如果circle == 4 说明走到最后我们克隆的这张图片了 我们就复原
            if (circle == ol.children.length) {
                circle = 0;
            }
            // 调用函数
            circleChange();
        }
    });

    // 9. 左侧按钮做法
    arrow_l.addEventListener('click', function() {
        if (flag) {
            flag = false;
            if (num == 0) {
                num = ul.children.length - 1;
                ul.style.left = -num * focusWidth + 'px';

            }
            num--;
            animate(ul, -num * focusWidth, function() {
                flag = true;
            });
            // 点击左侧按钮,小圆圈跟随一起变化 可以再声明一个变量控制小圆圈的播放
            circle--;
            // 如果circle < 0  说明第一张图片,则小圆圈要改为第4个小圆圈(3)
            // if (circle < 0) {
            //     circle = ol.children.length - 1;
            // }
            circle = circle < 0 ? ol.children.length - 1 : circle;
            // 调用函数
            circleChange();
        }
    });

    function circleChange() {
        // 先清除其余小圆圈的current类名
        for (var i = 0; i < ol.children.length; i++) {
            ol.children[i].className = '';
        }
        // 留下当前的小圆圈的current类名
        ol.children[circle].className = 'current';
    }
    // 10. 自动播放轮播图
    var timer = setInterval(function() {
        //手动调用点击事件
        arrow_r.click();
    }, 2000);

})

8. 简单轮播图动画函数封装

let animate=(obj,target,callback)=>{  //三个形参 执行动画的对象 移动总长度 回调函数
    clearInterval(obj.timer);
    obj.timer=setInterval(()=>{
        //计算步长
        var step=(target-obj.offsetLeft)/10;
        // 判断是正还是负
        step=step>0? Math.ceil(step):Math.floor(step);
        if(obj.offsetLeft==0){
            clearInterval(obj.offsetLeft)
            if(callback()){
                callback()
            }
        }
        obj.style.left=obj.offsetLeft+step+'px'
    },15)
}