javascript - 如何在点击时分别为每个元素设置动画?
问题描述
我当前的代码为“.movinglinecontainer”类的所有实例设置动画。我希望我的代码只为被点击的实例运行。
我尝试实现 $(this) 但似乎无法使其正常工作。
function ani() {
var loadingbar = jQuery('.movinglinecontainer');
if (loadingbar.hasClass('movingline')) {
loadingbar.removeClass('movingline').addClass('movinglinereverse');
} else if (loadingbar.hasClass('movinglinereverse')) {
loadingbar.removeClass('movinglinereverse').addClass('movingline');
} else {
loadingbar.addClass('movingline');
}
};
jQuery(document).ready(function() {
jQuery('.movinglinecontainer').on("click", function() {
ani();
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="intro">Frequently Asked Questions</div>
<div class="faq-accordion" data-accordion-group="">
<div data-accordion="" class="faq-main" onclick="ani();">
<div data-control="" class="faq-title">
<h4>Question goes here?</h4>
</div>
<div id="" class="movinglinecontainer"></div>
<div data-content="" style="max-height: 0px; overflow: hidden; transition: max-height 300ms ease 0s;">
<div class="faq-content">
<p class="answer-content">Answer goes here</p>
</div>
</div>
</div>
<div data-accordion="" class="faq-main" onclick="ani()">
<div data-control="" class="faq-title">
<h4>Question 2 goes here?</h4>
</div>
<div id="" class="movinglinecontainer"></div>
<div data-content="" style="max-height: 0px; overflow: hidden;">
<div class="faq-content">
<p class="answer-content">Answer 2 goes here!</p>
</div>
</div>
</div>
解决方案
您可以尝试将$(this)
作为参数传递给您的函数:
function ani(loadingbar) {
if(loadingbar) {
if (loadingbar.hasClass('movingline')) {
loadingbar.removeClass('movingline').addClass('movinglinereverse');
} else if (loadingbar.hasClass('movinglinereverse')) {
loadingbar.removeClass('movinglinereverse').addClass('movingline');
} else {
loadingbar.addClass('movingline');
}
}
};
jQuery(document).ready(function() {
jQuery('.movinglinecontainer').on("click", function() {
ani($(this));
});
});
.movinglinecontainer {
height: 20px;
transition: width 3s linear;
background: aqua;
width:30%
}
.movingline {
width: 100%
}
.movinglinereverse {
width: 30%
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="intro">Frequently Asked Questions</div>
<div class="faq-accordion" data-accordion-group="">
<div data-accordion="" class="faq-main" onclick="ani();">
<div data-control="" class="faq-title">
<h4>Question goes here?</h4>
</div>
<div id="" class="movinglinecontainer"></div>
<div data-content="" style="max-height: 0px; overflow: hidden; transition: max-height 300ms ease 0s;">
<div class="faq-content">
<p class="answer-content">Answer goes here</p>
</div>
</div>
</div>
<div data-accordion="" class="faq-main" onclick="ani()">
<div data-control="" class="faq-title">
<h4>Question 2 goes here?</h4>
</div>
<div id="" class="movinglinecontainer"></div>
<div data-content="" style="max-height: 0px; overflow: hidden;">
<div class="faq-content">
<p class="answer-content">Answer 2 goes here!</p>
</div>
</div>
</div>
推荐阅读
- php - 使用数据库中的图像路径在 php 中显示图像
- python - TableView 小部件仅在排序后填充数据
- c++ - 如何比较c ++列表中的两个连续元素
- r - 如何编辑由使用绘图创建它的其他函数生成的 R 图?
- c# - XML 子节点读取
- python - 在 python 中使用 selenium/chromedriver 发布 Instagram 故事
- angular - fxFlex 不调整元素大小
- ionic-framework - 离子 + 电容器的 SSL 固定问题
- gdb - 在 V8 中调试 CodeStubAssembler (CSA) 代码
- java - 当 FetchType 设置为 LAZY 时,从数据库中加载实体