新闻中心

点击时切换旋转箭头:J*aScript实现指南

2025-10-19
浏览次数:
返回列表

点击时切换旋转箭头:javascript实现指南

本文旨在解决使用 J*aScript 为多个箭头元素添加点击旋转效果时遇到的 "addEventListener is not a function" 错误。我们将详细介绍如何正确地为通过 `getElementsByClassName()` 获取的元素集合添加事件监听器,并提供两种解决方案:使用 `for` 循环和 `forEach()` 方法,并附带示例代码,帮助你轻松实现箭头旋转效果。

在使用 J*aScript 为页面上的多个元素添加事件监听器时,经常会使用 document.getElementsByClassName() 方法来获取这些元素。然而,直接对 getElementsByClassName() 返回的结果(一个类数组对象 HTMLCollection)调用 addEventListener 方法会导致 "addEventListener is not a function" 错误。这是因为 HTMLCollection 对象本身并不具备 addEventListener 方法,该方法只能直接应用于单个 DOM 元素。

要解决这个问题,我们需要遍历 HTMLCollection 对象,并为其中的每个元素单独添加事件监听器。以下介绍两种常用的方法:

使用 for 循环

for 循环是一种传统的遍历数组的方式,同样适用于 HTMLCollection 对象。

(function (document) {
  const div = document.getElementsByClassName("container");
  const divLen = div.length;
  let open = false;

  for (let i = 0; i < divLen; ++i) {
    div[i].addEventListener("click", function () {
      const icon = this.getElementsByClassName("arrow")[0]; // 获取当前点击的 container 中的 arrow
      if (open) {
        icon.className = "fa fa-arrow-down";
      } else {
        icon.className = "fa fa-arrow-down rotate";
      }

      open = !open;
    });
  }
})(document);

代码解释:

  1. 首先,使用 document.getElementsByClassName("container") 获取所有 class 为 "container" 的元素,并将结果存储在 div 变量中。
  2. 获取 div 的长度,存储在 divLen 变量中,以便在循环中使用。
  3. 使用 for 循环遍历 div,对每个元素 div[i] 调用 addEventListener 方法,添加点击事件监听器。
  4. 在事件处理函数中,使用 this 关键字引用当前被点击的元素(即 div[i]),然后使用 this.getElementsByClassName("arrow")[0] 获取当前 container 元素内部的 arrow 元素。
  5. 根据 open 变量的状态,切换 icon 元素的 class,实现箭头旋转效果。
  6. 最后,切换 open 变量的状态,以便下次点击时切换到相反的旋转状态。

注意: 在事件处理函数中使用 this 关键字非常重要,它可以确保我们获取到的是当前被点击的元素,而不是全局的 window 对象。

使用 forEach() 方法

forEach() 方法是 ES6 引入的一种更简洁的数组遍历方式。虽然 HTMLCollection 对象本身没有 forEach() 方法,但我们可以使用 Array.prototype.forEach.call() 将其转换为数组,然后再使用 forEach() 方法。

(function (document) {
  const div = document.getElementsByClassName("container");
  let open = false;

  Array.prototype.forEach.call(div, function (elem) {
    elem.addEventListener("click", function () {
      const icon = elem.getElementsByClassName("arrow")[0];
      if (open) {
        icon.className = "fa fa-arrow-down";
      } else {
        icon.className = "fa fa-arrow-down rotate";
      }
      open = !open;
    });
  });
})(document);

代码解释:

  1. 首先,使用 document.getElementsByClassName("container") 获取所有 class 为 "container" 的元素,并将结果存储在 div 变量中。
  2. 使用 Array.prototype.forEach.call(div, ...) 将 div 对象转换为数组,并使用 forEach 方法遍历数组中的每个元素。
  3. 在 forEach 方法的回调函数中,elem 参数代表当前遍历到的元素。
  4. 对每个元素 elem 调用 addEventListener 方法,添加点击事件监听器。
  5. 在事件处理函数中,使用 elem.getElementsByClassName("arrow")[0] 获取当前 container 元素内部的 arrow 元素。
  6. 根据 open 变量的状态,切换 icon 元素的 class,实现箭头旋转效果。
  7. 最后,切换 open 变量的状态,以便下次点击时切换到相反的旋转状态。

注意: 使用 Array.prototype.forEach.call() 可以将类数组对象转换为真正的数组,从而可以使用数组的各种方法,例如 forEach()。

jQuery图片轮播旋转切换效果代码 jQuery图片轮播旋转切换效果代码

jQuery图片轮播旋转切换效果代码基于jquery-1.7.2.min.js制作,点击左右箭头,切换图片显示,鼠标离开时自动播放,代码有详细中文注释,方便修改。

jQuery图片轮播旋转切换效果代码 71 查看详情 jQuery图片轮播旋转切换效果代码

完整示例代码

以下是包含 HTML、CSS 和 J*aScript 的完整示例代码:

HTML:

<div class="container">
  <i class="fa fa-arrow-down arrow"></i>
</div>

<div class="container">
  <i class="fa fa-arrow-down arrow"></i>
</div>

<div class="container">
  <i class="fa fa-arrow-down arrow"></i>
</div>

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" integrity="sha512-9usAa10IRO0HhonpyAIVpjrylPvoDwiPUiKdWk5t3PyolY1cOd4DSE0Ga+ri4AuTroPR5aQvXU9xC6qOPnzFeg==" crossorigin="anonymous" referrerpolicy="no-referrer" />

CSS:

.fa-arrow-down {
  transform: rotate(0deg);
  transition: transform 1s linear;
}

.fa-arrow-down.rotate {
  transform: rotate(180deg);
  transition: transform 1s linear;
}

J*aScript (使用 for 循环):

(function (document) {
  const div = document.getElementsByClassName("container");
  const divLen = div.length;
  let open = false;

  for (let i = 0; i < divLen; ++i) {
    div[i].addEventListener("click", function () {
      const icon = this.getElementsByClassName("arrow")[0];
      if (open) {
        icon.className = "fa fa-arrow-down";
      } else {
        icon.className = "fa fa-arrow-down rotate";
      }

      open = !open;
    });
  }
})(document);

J*aScript (使用 forEach 方法):

(function (document) {
  const div = document.getElementsByClassName("container");
  let open = false;

  Array.prototype.forEach.call(div, function (elem) {
    elem.addEventListener("click", function () {
      const icon = elem.getElementsByClassName("arrow")[0];
      if (open) {
        icon.className = "fa fa-arrow-down";
      } else {
        icon.className = "fa fa-arrow-down rotate";
      }
      open = !open;
    });
  });
})(document);

总结:

通过本文的介绍,你现在应该能够正确地为通过 getElementsByClassName() 获取的元素集合添加事件监听器,并成功实现箭头旋转效果。无论你选择使用 for 循环还是 forEach() 方法,关键在于理解 getElementsByClassName() 返回的是一个 HTMLCollection 对象,需要遍历该对象才能为每个元素单独添加事件监听器。希望本文对你有所帮助!

以上就是点击时切换旋转箭头:J*aScript实现指南的详细内容,更多请关注其它相关文章!


# 转换为  # 云浮网站seo怎么报价  # 灵寿市场网站推广模式  # 品牌网站推广品牌  # 咸宁网站推广外包  # 清镇网站建设方案  # 山西太原seo网  # 洛阳新站网站优化外包  # 未来5年seo的前景  # 外贸seo范例  # seo对黑帽的分析  # 可以使用  # 并将  # 单选框  # 两种  # 多个  # css  # 的是  # 表单  # 回调  # 遍历  # 点击事件  # cdn  # win  # ai  # 回调函数  # ajax  # js  # html  # java  # es6  # javascript 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 漫蛙漫画网页端入口 漫蛙2官方正版漫画站点  192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台  优酷会员付费后没到账怎么办_优酷会员充值异常及解决方法  蛙漫漫画免费阅读入口_蛙漫官方正版无广告纯净版  Excel Power Pivot如何处理XML数据源 构建高级数据模型  Python vgamepad库按键模拟:正确使用XUSB_BUTTON常量  抖音创作助手登录入口_抖音创作辅助工具官网直达  Odoo 16:在表单视图中基于当前记录动态修改Tree视图属性  冬*霸灯泡不亮怎么办_浴霸取暖灯一盏不亮的灯座清洁修复法  微博网页版主页入口 微博官方网站免登录访问  铁路12306的积分有效期是多久_铁路12306积分有效期说明  c++如何使用折叠表达式(Fold Expressions)_c++17可变参数模板新技巧  蓝湖怎样用切图标注提对接效率_蓝湖用切图标注提对接效率【设计对接】  微信语音通话掉线如何解决 微信语音通话稳定优化方法  字由网在线版登录地址 字由网网页版安全入口  支付宝解绑银行卡步骤_支付宝如何解除绑定银行卡  SteamMachine定价或为699美元 大家想入手吗?  在J*a项目里如何构建对象之间的契约_接口约束的实际落地  怎么去除衣服上的口红印_生活小妙招教你用酒精轻松擦除  12306选座系统怎么选连座_12306选座多人连坐操作方法  内存疯狂猛猛涨价:主板销量直接腰斩!  J*aScript实现单选按钮与关联输入框的联动禁用教程  学习通网页版官方登录 超星学习通电脑端入口指南  PyTorch模型训练准确率不提升:诊断与修复常见指标计算错误  J*aScript类型检查_j*ascript代码规范  J*aScript对象创建方式_J*aScript设计模式应用  Python大型XML文件高效流式解析教程  Win11怎么合并任务栏图标 Win11开启任务栏合并减少图标占空间【方法】  win11开机启动修复循环怎么办 Win11无法进入系统高级启动解决方法【修复】  NetBeans Ant项目:自动化将资源文件复制到dist目录的教程  抖音隐秘迷城小游戏入口_ 抖音冒险解谜小游戏秒玩  Python多线程中正确使用sigwait处理SIGALRM信号  Python中如何避免重复条件判断:利用数据结构实现动态逻辑  ArrayList与LinkedList核心操作的Big-O复杂度分析  飞书妙记怎样用语音转文字速记_飞书妙记用语音转文字速记【速记方法】  mc.js免安装版 mc.js一键畅玩入口  cad如何更改注释性对象的比例_cad注释性比例调整方法  谷歌邮箱注册显示错误Gmail服务器异常与延迟处理  CSS Box Model与弹性按钮:维持布局稳定的动画实践  多闪网页版在线观看免费入口_多闪官网访问入口  Golang如何实现Web接口签名验证_Golang Web接口签名校验开发方法  怎样使用“本地安全策略”提升Windows安全性_Secpol.msc配置指南【高手】  苹果手机如何防止被恶意App追踪  C++ map遍历方法大全_C++ map迭代器使用总结  R星幕后开发视频泄露 包含《GTA6》等多款大作  千牛数据看板网页版_千牛数据看板网页版访问方法  qq邮箱日历功能怎么用_创建日程与会议邀请的技巧  漫蛙漫画官方主页入口 漫蛙MANWA网页直达访问链接  解决Rails应用中内容错位与Turbo警告:meta标签误用导致富文本渲染异常  html5 app怎么运行环境_配html5 app运行环境【教程】 

搜索