在 Slick 滑块中单击时切换 class
Toggling a class on click in Slick slider
我试图通过在 'click' 事件上切换 class 来更改 Slick 幻灯片的样式。但由于某些原因,我没有得到正常的行为,即一些幻灯片的样式不会在点击时改变,而是在你水平滚动时改变。
你可以在我的 Github 查看网页:https://bilalarshad24k.github.io/inspocreate/
代码如下:
HTML
<div class="slickSlider col-sm-12 px-5" dir="ltr">
<button type="button " class="btn item categItem my-1 ">
<p>Business</p>
</button>
<button type="button " class="btn item categItem my-1 ">
<p>Empowerment</p>
</button>
<button type="button " class="btn item categItem my-1 ">
<p>Life Style</p>
</button>
<button type="button " class="btn item categItem my-1 ">
<p>Confident</p>
</button>
<button type="button " class="btn item categItem my-1 ">
<p>Fashion</p>
</button>
<button type="button " class="btn item categItem my-1 ">
<p>Office Dress</p>
</button>
<button type="button " class="btn item categItem my-1 ">
<p>Infotainment</p>
</button>
<button type="button " class="btn item categItem my-1 ">
<p>Success</p>
</button>
<button type="button " class="btn item categItem my-1 ">
<p>Women Empowerment</p>
</button>
<button type="button " class="btn item categItem my-1 ">
<p>Women Role</p>
</button>
<button type="button " class="btn item categItem my-1 ">
<p>Supportive Approach</p>
</button>
<button type="button " class="btn item categItem my-1 ">
<p>Society Role</p>
</button>
</div>
CSS
.styleCategItem {
border: 1px solid #a93a8c;
background-color: rgba(169, 58, 140, 0.1);
border-radius: 3px;
box-shadow: none !important;
}
.styleCategItem>p:before {
content: '\f00c';
font-family: FontAwesome;
font-size: 8px;
margin-right: 5px;
padding: 1px 3px;
color: white;
border-radius: 50%;
background-color: #a93a8c;
}
.categItem p {
display: flex;
align-items: center;
margin: auto;
}
Javascript
var x = document.querySelectorAll(".categItem");
for (let i = 0; i < x.length; i++) {
x[i].addEventListener('click', styleCategItem)
}
function styleCategItem(event) {
event.currentTarget.classList.toggle("styleCategItem")
}
看起来您正在使用 Slick 选项 infinite: true
,它会克隆一些幻灯片并将它们添加到幻灯片的前后,以便在您滚动时无缝换行。如果您检查标记,您可以看到这些带有 class slick-cloned
.
的幻灯片
当您单击“原始”幻灯片上的按钮时,它会将 class 添加到该按钮。当 Slick 决定显示克隆的幻灯片时,该幻灯片上的按钮未更改并以旧样式显示。
一个快速的尝试是将每个按钮包裹在 <div>
中,这样 Slick 将把它的 classes 应用到 div 而不是按钮(例如 slick-cloned
).这可能允许克隆的幻灯片获取您的内容更改,但我还没有测试它。
如果这不起作用,您可以为每个按钮添加一个唯一的数据属性(例如 data-id="1"
、data-id="2"
...),然后将其包含在匹配的克隆幻灯片中.单击后,您可以 select 所有具有匹配数据属性的元素并在其上切换 styleCategItem
。类似于:
function styleCategItem(event) {
var id = event.currentTarget.dataset.id;
var matches = document.querySelectorAll('[data-id="' + id '"]');
if (matches) {
matches.forEach(match => match.classList.toggle("styleCategItem"));
}
}
我试图通过在 'click' 事件上切换 class 来更改 Slick 幻灯片的样式。但由于某些原因,我没有得到正常的行为,即一些幻灯片的样式不会在点击时改变,而是在你水平滚动时改变。
你可以在我的 Github 查看网页:https://bilalarshad24k.github.io/inspocreate/
代码如下:
HTML
<div class="slickSlider col-sm-12 px-5" dir="ltr">
<button type="button " class="btn item categItem my-1 ">
<p>Business</p>
</button>
<button type="button " class="btn item categItem my-1 ">
<p>Empowerment</p>
</button>
<button type="button " class="btn item categItem my-1 ">
<p>Life Style</p>
</button>
<button type="button " class="btn item categItem my-1 ">
<p>Confident</p>
</button>
<button type="button " class="btn item categItem my-1 ">
<p>Fashion</p>
</button>
<button type="button " class="btn item categItem my-1 ">
<p>Office Dress</p>
</button>
<button type="button " class="btn item categItem my-1 ">
<p>Infotainment</p>
</button>
<button type="button " class="btn item categItem my-1 ">
<p>Success</p>
</button>
<button type="button " class="btn item categItem my-1 ">
<p>Women Empowerment</p>
</button>
<button type="button " class="btn item categItem my-1 ">
<p>Women Role</p>
</button>
<button type="button " class="btn item categItem my-1 ">
<p>Supportive Approach</p>
</button>
<button type="button " class="btn item categItem my-1 ">
<p>Society Role</p>
</button>
</div>
CSS
.styleCategItem {
border: 1px solid #a93a8c;
background-color: rgba(169, 58, 140, 0.1);
border-radius: 3px;
box-shadow: none !important;
}
.styleCategItem>p:before {
content: '\f00c';
font-family: FontAwesome;
font-size: 8px;
margin-right: 5px;
padding: 1px 3px;
color: white;
border-radius: 50%;
background-color: #a93a8c;
}
.categItem p {
display: flex;
align-items: center;
margin: auto;
}
Javascript
var x = document.querySelectorAll(".categItem");
for (let i = 0; i < x.length; i++) {
x[i].addEventListener('click', styleCategItem)
}
function styleCategItem(event) {
event.currentTarget.classList.toggle("styleCategItem")
}
看起来您正在使用 Slick 选项 infinite: true
,它会克隆一些幻灯片并将它们添加到幻灯片的前后,以便在您滚动时无缝换行。如果您检查标记,您可以看到这些带有 class slick-cloned
.
当您单击“原始”幻灯片上的按钮时,它会将 class 添加到该按钮。当 Slick 决定显示克隆的幻灯片时,该幻灯片上的按钮未更改并以旧样式显示。
一个快速的尝试是将每个按钮包裹在 <div>
中,这样 Slick 将把它的 classes 应用到 div 而不是按钮(例如 slick-cloned
).这可能允许克隆的幻灯片获取您的内容更改,但我还没有测试它。
如果这不起作用,您可以为每个按钮添加一个唯一的数据属性(例如 data-id="1"
、data-id="2"
...),然后将其包含在匹配的克隆幻灯片中.单击后,您可以 select 所有具有匹配数据属性的元素并在其上切换 styleCategItem
。类似于:
function styleCategItem(event) {
var id = event.currentTarget.dataset.id;
var matches = document.querySelectorAll('[data-id="' + id '"]');
if (matches) {
matches.forEach(match => match.classList.toggle("styleCategItem"));
}
}