思考:引入外部变量对功能实现的必要性

本文通过一个导航栏的示例,探讨了在JavaScript中处理复杂DOM交互时如何巧妙地使用外部变量。作者指出,引入外部变量可以有效地跟踪元素状态,并在不同事件之间传递信息。文章总结了在遇到类似问题时,通常需要引入与复杂功能涉及的主要元素数量相等的外部变量,这些变量用于记录元素的状态。此外,作者分享了初次接触此类问题时的经验,并强调了外部变量在解决这类问题中的重要性。
摘要由CSDN通过智能技术生成

前言

  在学习bom和dom的过程中发现有一类的功能是比较复杂并且初学者难以实现的,复杂的功能都有相似的共同点:一个原素被多个元素相连接or一个元素注册了多个事件or两者都存在。

例子的引入

  1 作用目标

  一个好看的导航栏

  

  2 功能叙述

  

        // 鼠标经过某个小li, 云朵跟这到当前小li位置

        // 鼠标离开这个小li, 云朵复原为原来的位置

        // 鼠标点击了某个小li, 云朵就会留在点击这个小li的位置
  

  3 实现核心代码

   实现方案一

var current = 0;
for (var i = 0; i < lis.length; i++) {
    lis[i].addEventListener('mouseover', function() {
        animate(cloud, this.offsetLeft);
        flag = true;
    });
    lis[i].addEventListener('mouseleave', function() {
        if (flag) {
            animate(cloud, current);
        }
    });
    lis[i].addEventListener('click', function() {
        current = this.offsetLeft;
    });
}

   实现方案二

var flag = true;
        for (var i = 0; i < lis.length; i++) {
            lis[i].addEventListener('mouseover', function() {
                animate(cloud, this.offsetLeft);
                flag = true;
            });
            lis[i].addEventListener('mouseleave', function() {
                if (flag) {
                    animate(cloud, 0);
                }
            });
            lis[i].addEventListener('click', function() {
                flag = false;
            });
        }

   4 写时候的心得

   1 只要引入了一个外部变量就可以很轻松的解决问题如果不引入则很难解决问题

   2 我自己第一次碰到比较复杂的功能就是轮播图 发现新人很难想到引入外部变量来解决问题(当然天才除外)。

思考的总结

  在复杂问题中引入外部变量是非常有必要的几乎是解决的最优解,那么究竟引入几个变量呢?(干货满满哦)

   仔细观察所学得的代码发现当一个复杂功能需要实现时 引入复杂功能所涉及到的主原素(我认为写的时候很好判断)的个数的外部变量就可以了   注意在实际写的过程中吧记录一个元素的一个状态称为一个外部变量

  外部变量是用来作什么的呢?

  仔细思考后,我认为外部变量时用来记录主元素的在此刻的状态的并且将此状态传递给其他涉及到的元素,变量类型可以是任意类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Heigl swift

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值