DOM编程案例题【3】

  • 表单验证

<h3>登陆</h3>
<form>
  用户名:<input type="text" id="userName"><br>
  密码:<input type="password" id="password"><br>
  <input type="button" value="提交" onclick="checkForm()">
</form>
<script>
  function checkForm(){
    let userName = document.getElementById('userName');
    let password = document.getElementById('password');
    //用户名非空验证
    if(userName.value==''){
      alert('用户名不能为空!');
      return;
    }
    //密码非空验证
    if(password.value==''){
      alert('密码不能为空!');
      return;
    }
    //密码长度必须为六位
    if(password.value.length!=6){
      alert('密码长度必须为6位!');
      return;
    }
    //密码必须全部为数字
    if(isNaN(password.value)){
      alert('密码必须全部为数字!');
      return;
    }
    alert('提交');
  }
</script>
  • 时钟

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>时钟</title>
  </head>
  <body>
    <p id="myclock" style="font-size:24px"></p>
    <button id="startBtn">开始</button>
    <button id="stopBtn">停止</button>
    <script>
      let myclock = document.getElementById("myclock");
      let startBtn = document.getElementById("startBtn");
      let stopBtn = document.getElementById("stopBtn");
      callback();
      let mytimer = setInterval(callback, 1000);
      function callback() {
        var mydate = new Date();
        myclock.innerHTML = mydate.getHours() +
          ":" + mydate.getMinutes() +
          ":" + mydate.getSeconds();
      }
      //启动按钮事件
      startBtn.onclick = function() {
        if (mytimer == null) {
          mytimer = setInterval(callback, 1000);
        }
      };
      //停止按钮事件
      stopBtn.onclick = function() {
        clearInterval(mytimer);
        mytimer = null;
      };
    </script>
  </body>
</html>
  • 全选

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>全选</title>
  </head>
  <body>
    全选<input class="btn" type="checkbox">
    <ul>
      <li><input type="checkbox">杜比环绕,家庭影院必备,超真实享受</li>
      <li><input type="checkbox">NVDIA 99999GT 2G 1024bit极品显卡,不容错过</li>
      <li><input type="checkbox">精品热卖,高清晰,45寸LED电视</li>
      <li><input type="checkbox">Sony索尼家用最新款笔记本</li>
      <li><input type="checkbox">华为,荣耀3C,超低价,性价比奇高</li>
    </ul>
    <script>
      let btn = document.getElementsByClassName('btn')[0];
      let inputArr = document.getElementsByTagName('ul')[0].getElementsByTagName('input');
      btn.onclick = function() {
        let bool = btn.checked;
        for (let i = 0; i < inputArr.length; i++) {
          inputArr[i].checked = bool;
        }
      }
    </script>
  </body>
</html>
  • 图片轮播

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>图片轮播</title>
    <style>
      #lunbo {
        width: 1226px;
        height: 460px;
        position: relative;
        margin: 0 auto;
      }
      #lunbo img {
        width: 1226px;
        height: 460px;
        position: absolute;
        left: 0;
        top: 0;
        display: none;
      }
    </style>
  </head>
  <body>
    <div id="lunbo">
      <img src="img/lunbo1.jpg">
      <img src="img/lunbo2.jpg">
      <img src="img/lunbo3.jpg">
      <img src="img/lunbo4.jpg">
      <img src="img/lunbo5.jpg">
      <img src="img/lunbo6.jpg">
    </div>
    <script>
      let imgArr = document.getElementById('lunbo').getElementsByTagName('img');
      //图片数量
      let imgNum = imgArr.length
      //用此索引来跟踪图片轮播顺序(第一张图片索引即为0)
      let index = 0;
      //初始化第一张图片
      imgArr[0].style.display = 'block';
      //每隔3秒轮播一张图片
      setInterval(function(){
        index++;
        //如果轮播到最后一张图片,那么索引就归零
        if (index > imgNum - 1) {
          index = 0;
        }
        //先隐藏所有图片
        for (let i=0;i<imgNum; i++) {
          imgArr[i].style.display = 'none';
        }
        //再显示当前图片
        imgArr[index].style.display = 'block';
      }, 3000);
    </script>
  </body>
</html>
  • 带过渡效果的图片轮播

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>图片轮播(过度效果)</title>
    <style>
      #lunbo {
        width: 1226px;
        height: 460px;
        position: relative;
        margin: 0 auto;
      }
      #lunbo img {
        width: 1226px;
        height: 460px;
        position: absolute;
        left: 0;
        top: 0;
        opacity: 0;
        /*display: none;*/
      }
    </style>
  </head>
  <body>
    <div id="lunbo">
      <img src="img/lunbo1.jpg">
      <img src="img/lunbo2.jpg">
      <img src="img/lunbo3.jpg">
      <img src="img/lunbo4.jpg">
      <img src="img/lunbo5.jpg">
      <img src="img/lunbo6.jpg">
    </div>
    <script>
      let imgArr = document.getElementById('lunbo').getElementsByTagName('img');
      //图片数量
      let imgNum = imgArr.length;
      //当前图片索引
      let index = 0;
      //上一张图片索引
      let preIndex = index;
      //当前图片初始透明度
      let opacityValue = 0;
      //上一张图片初始透明度
      let preOpacityValue = 1;
      //初始化第一张图片
      imgArr[index].style.opacity = 1;
      setInterval(function() {
        //每次切换时,确定当前图片索引与上一张图片索引
        preIndex = index;
        index++;
        //判断是否进行下一轮轮播
        if (index > imgNum-1) {
          index = 0;
        }
        //上一张图片隐藏
        hideImg();
        //当前图片显示
        showImg();
      }, 3000);
      function showImg() {
        //设置当前显示图片透明度初始值
        opacityValue = 0;
        //淡入动画
        let time = setInterval(function() {
          opacityValue += 0.05;
          if (opacityValue >= 1) {
            opacityValue = 1;
            clearInterval(time);
          }
          imgArr[index].style.opacity = opacityValue;
        }, 40);
      }
      function hideImg() {
        //设置上一张隐藏图片透明度初始值
        preOpacityValue = 1;
        //淡出动画
        let time = setInterval(function() {
          preOpacityValue -= 0.05;
          if (preOpacityValue <= 0) {
            preOpacityValue = 0;
            clearInterval(time);
          }
          imgArr[preIndex].style.opacity = preOpacityValue;
        }, 40);
      }
    </script>
  </body>
</html>
  • 放大镜

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>放大镜</title>
    <style>
      #fdj {
        position: relative;
        width: 450px;
        height: 450px;
      }
      #fdj img{
        width: 450px;
        height: 450px;
      }
      #fdj .mengban {
        position: absolute;
        display: none;
        width: 225px;
        height: 225px;
        background-color: yellow;
        opacity: 0.4;
        cursor: move;
        left: 0;
        top: 0;
      }
      #fdj .fdjBox {
        position: absolute;
        width: 450px;
        height: 450px;
        top: 0;
        left: 460px;
        display: none;
      }
    </style>
  </head>
  <body>
    <!--这里是大图片-->
    <div id="fdj">
      <img src="img/dazi.jpg">
      <div class="mengban"></div>
      <div class="fdjBox"></div>
    </div>
    <script>
      <!-- onload能保证图片也加载完毕 -->
        window.onload = function() {
          let fdj = document.getElementById('fdj');
          let mengban = fdj.getElementsByClassName('mengban')[0];
          let fdjBox = fdj.getElementsByClassName('fdjBox')[0];
          //图片尺寸
          let imgWidth = fdj.getElementsByTagName('img')[0].width;
          fdj.onmousemove = function(event) {
            //这里获取了蒙板的left和top(offsetLeft是fdj距离视口的位置)
            let left = event.clientX - this.offsetLeft - imgWidth / 2 / 2;
            let top = event.clientY - this.offsetTop - imgWidth / 2 / 2;
            //console.log(left + ',' + top);
            if (left < 0) {
              left = 0;
            }
            if (left > this.offsetWidth - imgWidth/2) {
              left = this.offsetWidth - imgWidth/2;
            }
            if (top < 0) {
              top = 0;
            }
            if (top > this.offsetHeight - imgWidth/2) {
              top = this.offsetHeight - imgWidth/2;
            }
            mengban.style.left = left + 'px';
            mengban.style.top = top + 'px';
            mengban.style.display = 'block';
            fdjBox.style.backgroundImage = 'url(img/dazi.jpg)';
            fdjBox.style.backgroundRepeat = 'no-repeat';
            fdjBox.style.backgroundPosition = -left * 2 + 'px' + ' ' + -top * 2 + 'px';
            fdjBox.style.display = 'block';
          }
          fdj.onmouseout = function() {
            mengban.style.display = 'none';
            fdjBox.style.display = 'none';
          }
        }
    </script>
  </body>
</html>
  • 走马灯

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>走马灯</title>
    <style>
      #container {
        width: 750px;
        height: 198px;
        margin: 0 auto;
        display: flex;
      }
      #container > img{
        width: 55px;
        height: 198px;
      }
      #container div{
        position: relative;
        width: 640px;
        height: 198px;
        overflow: hidden;
        display: flex;
      }
      #container div ul {
        list-style: none;
        margin: 0;
        padding: 0;
        position: absolute;
        width: 640px;
        height: 198px;
        left: 0px;
        top: 0px;
        display: flex;
      }
      #container div ul li {
        width: 160px;
        height: 198px;
      }
    </style>
  </head>
  <body>
    <!--图片尺寸:160*198-->
    <div id="container">
      <img src="img/left.jpg">
      <div>
        <ul>
          <li><a href="#"><img src="img/zmd1.jpg"></a></li>
          <li><a href="#"><img src="img/zmd2.jpg"></a></li>
          <li><a href="#"><img src="img/zmd3.jpg"></a></li>
          <li><a href="#"><img src="img/zmd4.jpg"></a></li>
        </ul>
      </div>
      <img src="img/right.jpg">
    </div>
    <script>
      window.onload = function() {
        let container = document.getElementById('container');
        let scoll = container.getElementsByTagName("ul")[0];
        let imgArr = document.querySelectorAll('#container > img');
        let btnLeft = imgArr[0];
        let btnRight = imgArr[1];
        //滚动速度
        let speed = 5;
        //滚动方向(初始向右)
        let fangxiang = 1;
        //获取图片数量
        let imgNum = scoll.getElementsByTagName("img").length;
        //获取图片宽度
        let imgWidth = scoll.getElementsByTagName("img")[0].width;
        //获取滚动条宽度
        let scollWidth = imgNum * imgWidth;
        //给滚动条加一倍的内容
        scoll.style.width = scollWidth * 2 + "px";
        scoll.innerHTML += scoll.innerHTML;
        //滚动条初始位置
        scoll.style.left = "-" + scollWidth + "px";
        let myTimer = setInterval(gundong, 40);
        function gundong() {
          if (fangxiang == 1) {
            if (scoll.offsetLeft >= 0) {
              scoll.style.left = "-" + scollWidth + "px";
            }
          } else {
            if (scoll.offsetLeft <= scollWidth * -1) {
              scoll.style.left = 0 + "px";
            }
              }
            scoll.style.left = scoll.offsetLeft + (speed * fangxiang) + "px";
          }
            btnLeft.onmouseover = function() {
            fangxiang = -1;
          };
            btnRight.onmouseover = function() {
            fangxiang = 1;
          };
            scoll.onmouseover = function() {
            clearInterval(myTimer);
          }
            scoll.onmouseout = function() {
            myTimer = setInterval(gundong, 40);
          }
          }
            </script>
            </body>
            </html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356