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

本文旨在解决使用 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);代码解释:
- 首先,使用 document.getElementsByClassName("container") 获取所有 class 为 "container" 的元素,并将结果存储在 div 变量中。
- 获取 div 的长度,存储在 divLen 变量中,以便在循环中使用。
- 使用 for 循环遍历 div,对每个元素 div[i] 调用 addEventListener 方法,添加点击事件监听器。
- 在事件处理函数中,使用 this 关键字引用当前被点击的元素(即 div[i]),然后使用 this.getElementsByClassName("arrow")[0] 获取当前 container 元素内部的 arrow 元素。
- 根据 open 变量的状态,切换 icon 元素的 class,实现箭头旋转效果。
- 最后,切换 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);代码解释:
- 首先,使用 document.getElementsByClassName("container") 获取所有 class 为 "container" 的元素,并将结果存储在 div 变量中。
- 使用 Array.prototype.forEach.call(div, ...) 将 div 对象转换为数组,并使用 forEach 方法遍历数组中的每个元素。
- 在 forEach 方法的回调函数中,elem 参数代表当前遍历到的元素。
- 对每个元素 elem 调用 addEventListener 方法,添加点击事件监听器。
- 在事件处理函数中,使用 elem.getElementsByClassName("arrow")[0] 获取当前 container 元素内部的 arrow 元素。
- 根据 open 变量的状态,切换 icon 元素的 class,实现箭头旋转效果。
- 最后,切换 open 变量的状态,以便下次点击时切换到相反的旋转状态。
注意: 使用 Array.prototype.forEach.call() 可以将类数组对象转换为真正的数组,从而可以使用数组的各种方法,例如 forEach()。
jQuery图片轮播旋转切换效果代码
jQuery图片轮播旋转切换效果代码基于jquery-1.7.2.min.js制作,点击左右箭头,切换图片显示,鼠标离开时自动播放,代码有详细中文注释,方便修改。
71
查看详情
完整示例代码
以下是包含 HTML、CSS 和 J*aScript 的完整示例代码:
HTML:
<divclass="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运行环境【教程】


2025-10-19
浏览次数:次
返回列表
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" />