fengchuanyu 5 hónapja
szülő
commit
a904abd102
1 módosított fájl, 100 hozzáadás és 0 törlés
  1. 100 0
      5_DOM/练习9_三道杠.html

+ 100 - 0
5_DOM/练习9_三道杠.html

@@ -0,0 +1,100 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Document</title>
+    <style>
+        div{
+            width: 200px;
+            height: 50px;
+            background-color: red;
+            margin:20px 0;
+        }
+    </style>
+</head>
+<body>
+    <div class="box"></div>
+    <div class="box"></div>
+    <div class="box"></div>
+    <script>
+        var aBox = document.getElementsByClassName("box");
+        // this只能指向调用自己的对象
+
+        // 方法二通过函数去分配工作
+        // 循环给每一条杠绑定事件
+        for(var i=0;i<aBox.length;i++){
+            // 绑定鼠标移入事件
+            aBox[i].onmouseenter = function(){
+                // 调用控制元素变长的方法
+                addWidth(this);
+            }
+            // 绑定鼠标移出事件
+            aBox[i].onmouseleave = function(){
+                // 调用控制元素变短的方法
+                reduceWidth(this);
+            }
+        }
+        // 定义控制元素变短的方法
+        function reduceWidth(obj){
+            //第一步 清除控制元素变长的定时器
+            clearInterval(obj.timer1);
+            // 给当前对象绑定一个timer2 用来装载变短的定时器
+            obj.timer2 = setInterval(function(){
+                if(obj.offsetWidth <= 200){
+                    clearInterval(obj.timer2);
+                }
+                obj.style.width = obj.offsetWidth - 10 + "px";
+            },16);
+        }
+        // 定义控制元素变长的方法
+        function addWidth(obj){
+            // 第一步 清除控制元素变短的定时器
+            clearInterval(obj.timer2);
+            // 给当前对象绑定一个timer1 用来装载变长的定时器
+            obj.timer1 = setInterval(function(){
+                if(obj.offsetWidth >= 600){
+                    clearInterval(obj.timer1);
+                }else{
+                    obj.style.width = obj.offsetWidth + 10 + "px";
+                }
+            },16);
+        }
+
+        // 方法一 所有的工作都由事件自己去处理
+        // // 为三条杠循环绑定事件
+        // for(var i=0;i<aBox.length;i++){
+        //     // 给每一条杠加上一个timer1用来装载变长的定时器
+        //     aBox[i].timer1 = null;
+        //      // 绑定鼠标移入事件
+        //     aBox[i].onmouseenter = function(){
+        //         clearInterval(this.timer2);
+        //         // 定义局部变量that 代替this 那么函数内再有函数就可以使用this了
+        //         var that = this;
+        //         // 控制三条杠的宽度增加
+        //         this.timer1 = window.setInterval(function(){
+        //             if(that.offsetWidth >= 600){
+        //                 clearInterval(that.timer1);
+        //             }else{
+        //                 that.style.width = that.offsetWidth + 10 + "px";
+        //             }
+        //         },16);
+        //     }
+        //     // 给每一条杠加上一个timer2 用来装载变短的定时器
+        //     aBox[i].timer2 = null;
+        //     // 绑定鼠标移出事件
+        //     aBox[i].onmouseleave = function(){
+        //         clearInterval(this.timer1);
+        //         var that = this;
+        //         this.timer2 = setInterval(function(){
+        //             if(that.offsetWidth <= 200){
+        //                 clearInterval(that.timer2);
+        //             }else{
+        //                 that.style.width = that.offsetWidth - 10 + "px"; 
+        //             }
+        //         },16);
+        //     }
+        // }
+    </script>
+</body>
+</html>