- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要一些帮助来创建一个卡片轮播,该卡片轮播在单击卡片时会向左或向右滑动,并且仅在单击中心的卡片时才打开链接。第一部分(滑动卡片)正在工作。但是,我很难弄清楚如何使居中的卡片在单击后打开链接。我不希望左侧和右侧的卡片打开链接,这就是为什么所有卡片都具有 pointer-events:none
属性。
我尝试删除中心卡的 pointer-events:none
属性(使用 .center-card {pointer-events:auto;}
),但是没用。此外,从 .card
中删除 pointer-events:none
并将其添加到左侧和右侧的卡片中,使整个 Javascript 代码变得无用。
我是 Javascript 的绝对初学者,因此非常感谢任何帮助。或者,如果一个可能的解决方案可以仅使用 HTML/CSS 来完成,那就太好了。
const Cards = (() => {
window.addEventListener(
"DOMContentLoaded",
() => {
setTimeout(init, 1);
},
true
);
function init(e) {
if (document.querySelector(".carousel")) {
let cards = document.querySelector(".carousel");
cards.addEventListener("click", clicked, false);
document.querySelectorAll(".carousel .card")[1].click();
}
}
function clicked(e) {
let card = e.target;
if (card.getAttribute("data-card")) {
rearrange(card.getAttribute("data-card"));
}
}
function rearrange(card) {
let cards = document.querySelectorAll(".carousel .card");
for (let n = 0; n < cards.length; n++) {
cards[n].classList.remove("card-left-left");
cards[n].classList.remove("card-left");
cards[n].classList.remove("card-center");
cards[n].classList.remove("card-right");
cards[n].classList.remove("card-right-right");
}
cards[card].classList.add("card-center");
if (card == 0) {
cards[3].classList.add("card-left-left");
cards[4].classList.add("card-left");
cards[1].classList.add("card-right");
cards[2].classList.add("card-right-right");
}
if (card == 1) {
cards[4].classList.add("card-left-left");
cards[0].classList.add("card-left");
cards[2].classList.add("card-right");
cards[3].classList.add("card-right-right");
}
if (card == 2) {
cards[0].classList.add("card-left-left");
cards[1].classList.add("card-left");
cards[3].classList.add("card-right");
cards[4].classList.add("card-right-right");
}
if (card == 3) {
cards[1].classList.add("card-left-left");
cards[2].classList.add("card-left");
cards[4].classList.add("card-right");
cards[0].classList.add("card-right-right");
}
if (card == 4) {
cards[2].classList.add("card-left-left");
cards[3].classList.add("card-left");
cards[0].classList.add("card-right");
cards[1].classList.add("card-right-right");
}
}
return {
init
};
})();
html, body {
width: 100%;
height: 100%;
margin: 0px;
padding: 0px;
font-family: Poppins, Roboto, Arial;
}
#container {
background-color: #fff;
width: 100%;
height: 200%;
position: relative;
z-index: 0;
}
.carousel
{
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
height: 75%;
top: 950px;
margin: 0 auto;
}
.card
{
display: flex;
width: 25rem;
height: 20rem;
border-radius: 0.5rem;
transform-origin: center center;
transform: scale(1) translate(0px,0px) perspective(750px) rotateY(0deg);
transition-timing-function: cubic-bezier(0.42, 0, 0.58, 1);
transition-duration: 0.5s;
position: absolute;
top: 0;
z-index: 3;
cursor: pointer;
background: #fff;
overflow: hidden;
margin: 50px 0 50px 0;
}
.card *
{
pointer-events: none;
}
.card-left-left {
opacity: 0.7;
transform: scale(0.5) translate(-600px,0px) perspective(750px) rotateY(10deg);
z-index: 0;
}
.card-left
{
transform: scale(0.7) translate(-300px,0px) perspective( 750px ) rotateY(10deg);
-webkit-box-shadow: -1px 21px 11px -2px rgba(0,0,0,0.25);
-moz-box-shadow: -1px 21px 11px -2px rgba(0,0,0,0.25);
box-shadow: -1px 21px 11px -2px rgba(0,0,0,0.25);
z-index: 1;
}
.card-center
{
transform: scale(1) translate(0px, 0px) perspective( 750px ) rotateY(0deg);
-webkit-box-shadow: -1px 21px 11px -2px rgba(0,0,0,0.25);
-moz-box-shadow: -1px 21px 11px -2px rgba(0,0,0,0.25);
box-shadow: -1px 21px 11px -2px rgba(0,0,0,0.25);
z-index: 3;
}
.card-right
{
transform: scale(0.7) translate(300px,0px) perspective( 750px ) rotateY(-10deg);
-webkit-box-shadow: -1px 21px 11px -2px rgba(0,0,0,0.25);
-moz-box-shadow: -1px 21px 11px -2px rgba(0,0,0,0.25);
box-shadow: -1px 21px 11px -2px rgba(0,0,0,0.25);
z-index: 1;
}
.card-right-right {
opacity: 0.7;
transform: scale(0.5) translate(600px,0px) perspective( 750px ) rotateY(-10deg);
z-index: 0;
}
.card-image
{
width: 100%;
height: 80%;
background: #fff;
position: absolute;
flex: 0 0 100%;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
clear: both;
}
.card-image img {
min-width: 100%;
min-height: 100%;
margin: 0;
padding: 0;
}
.card-text
{
width: 100%;
height: 20%;
display: flex;
position: relative;
top: 80%;
justify-content: center;
}
.card-text p {
padding: 20px;
margin: 0;
color: black;
}
<div id="container">
<div class="carousel">
<div class="card" data-card="0">
<div class="card-image"><img src="https://www.arohatours.co.nz/media/1509/coromandel-hahai.jpg?anchor=center&mode=crop&width=600&height=450&rnd=131772666290000000&quality=80" />
</div>
<div class="card-text"><p>Tekst 1</p>
</div>
</div>
<div class="card" data-card="1">
<div class="card-image"><img src="https://www.arohatours.co.nz/media/1509/coromandel-hahai.jpg?anchor=center&mode=crop&width=600&height=450&rnd=131772666290000000&quality=80" />
</div>
<div class="card-text"><p>Tekst 2</p>
</div>
</div>
<div class="card" data-card="2">
<div class="card-image"><img src="https://www.arohatours.co.nz/media/1509/coromandel-hahai.jpg?anchor=center&mode=crop&width=600&height=450&rnd=131772666290000000&quality=80" />
</div>
<div class="card-text"><p>Tekst 3</p>
</div>
</div>
<div class="card" data-card="3">
<div class="card-image"><img src="https://www.arohatours.co.nz/media/1509/coromandel-hahai.jpg?anchor=center&mode=crop&width=600&height=450&rnd=131772666290000000&quality=80" />
</div>
<div class="card-text"><p>Tekst 4</p>
</div>
</div>
<div class="card" data-card="4">
<div class="card-image"><img src="https://www.arohatours.co.nz/media/1509/coromandel-hahai.jpg?anchor=center&mode=crop&width=600&height=450&rnd=131772666290000000&quality=80" />
</div>
<div class="card-text"><p>Tekst 5</p>
</div>
</div>
</div>
</div>
最佳答案
看看这个。我也想重写重新排列函数,但这只是所需的最小更改
如果你也想允许点击文本,你可以添加 onclicklocation=hrefs[this.closest(".card").getAttribute("data-card")]
const hrefs=["page1.html","page2.html","page3.html","page4.html","page5.html"]
function clicked(e) {
let card = e.target;
let index = card.getAttribute("data-card");
if (card.getAttribute("data-card")) {
if (card.classList.contains("card-center")) {
location = hrefs[index]
}
else rearrange(index);
}
}
const Cards = (() => {
window.addEventListener(
"DOMContentLoaded",
() => {
setTimeout(init, 1);
},
true
);
function init(e) {
if (document.querySelector(".carousel")) {
let cards = document.querySelector(".carousel");
cards.addEventListener("click", clicked, false);
document.querySelectorAll(".carousel .card")[1].click();
}
}
const hrefs = ["page1.html", "page2.html", "page3.html", "page4.html", "page5.hrml"]
function clicked(e) {
let card = e.target;
let index = card.getAttribute("data-card");
if (card.getAttribute("data-card")) {
if (card.classList.contains("card-center")) {
location = hrefs[index]
} else rearrange(index);
}
}
function arrayRotate(arr, count) {
count -= arr.length * Math.floor(count / arr.length);
arr.push.apply(arr, arr.splice(0, count));
return arr;
}
let arr = [0, 1, 2, 3, 4]
const cnt = {
"-left-left": -2,
"-left": -1,
"-center": 0,
"-right": 1,
"-right-right": 2
}
const keys = Object.keys(cnt);
function rearrange(card) {
const cardDiv = document.querySelector('[data-card="' + card + '"]')
const cardClass = cardDiv ? cardDiv.className.replace(/card|,-/g, "").trim() : "";
const count = cnt[cardClass];
if (count) {
arrayRotate(arr, count)
}
arr.forEach((index, i) => {
let thisCard = document.querySelector('[data-card="' + index + '"]')
thisCard.className = "card card" + keys[i]
})
let cards = document.querySelectorAll(".carousel .card");
}
return {
init
};
})();
html,
body {
width: 100%;
height: 100%;
margin: 0px;
padding: 0px;
font-family: Poppins, Roboto, Arial;
}
#container {
background-color: #fff;
width: 100%;
height: 200%;
position: relative;
z-index: 0;
}
.carousel {
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
height: 75%;
top: 950px;
margin: 0 auto;
}
.card {
display: flex;
width: 25rem;
height: 20rem;
border-radius: 0.5rem;
transform-origin: center center;
transform: scale(1) translate(0px, 0px) perspective(750px) rotateY(0deg);
transition-timing-function: cubic-bezier(0.42, 0, 0.58, 1);
transition-duration: 0.5s;
position: absolute;
top: 0;
z-index: 3;
cursor: pointer;
background: #fff;
overflow: hidden;
margin: 50px 0 50px 0;
}
.card * {
pointer-events: none;
}
.card-left-left {
opacity: 0.7;
transform: scale(0.5) translate(-600px, 0px) perspective(750px) rotateY(10deg);
z-index: 0;
}
.card-left {
transform: scale(0.7) translate(-300px, 0px) perspective( 750px) rotateY(10deg);
-webkit-box-shadow: -1px 21px 11px -2px rgba(0, 0, 0, 0.25);
-moz-box-shadow: -1px 21px 11px -2px rgba(0, 0, 0, 0.25);
box-shadow: -1px 21px 11px -2px rgba(0, 0, 0, 0.25);
z-index: 1;
}
.card-center {
transform: scale(1) translate(0px, 0px) perspective( 750px) rotateY(0deg);
-webkit-box-shadow: -1px 21px 11px -2px rgba(0, 0, 0, 0.25);
-moz-box-shadow: -1px 21px 11px -2px rgba(0, 0, 0, 0.25);
box-shadow: -1px 21px 11px -2px rgba(0, 0, 0, 0.25);
z-index: 3;
}
.card-right {
transform: scale(0.7) translate(300px, 0px) perspective( 750px) rotateY(-10deg);
-webkit-box-shadow: -1px 21px 11px -2px rgba(0, 0, 0, 0.25);
-moz-box-shadow: -1px 21px 11px -2px rgba(0, 0, 0, 0.25);
box-shadow: -1px 21px 11px -2px rgba(0, 0, 0, 0.25);
z-index: 1;
}
.card-right-right {
opacity: 0.7;
transform: scale(0.5) translate(600px, 0px) perspective( 750px) rotateY(-10deg);
z-index: 0;
}
.card-image {
width: 100%;
height: 80%;
background: #fff;
position: absolute;
flex: 0 0 100%;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
clear: both;
}
.card-image img {
min-width: 100%;
min-height: 100%;
margin: 0;
padding: 0;
}
.card-text {
width: 100%;
height: 20%;
display: flex;
position: relative;
top: 80%;
justify-content: center;
}
.card-text p {
padding: 20px;
margin: 0;
color: black;
}
<div id="container">
<div class="carousel">
<div class="card" data-card="0">
<div class="card-image"><img src="https://www.arohatours.co.nz/media/1509/coromandel-hahai.jpg?anchor=center&mode=crop&width=600&height=450&rnd=131772666290000000&quality=80" />
</div>
<div class="card-text">
<p>Tekst 1</p>
</div>
</div>
<div class="card" data-card="1">
<div class="card-image"><img src="https://www.arohatours.co.nz/media/1509/coromandel-hahai.jpg?anchor=center&mode=crop&width=600&height=450&rnd=131772666290000000&quality=80" />
</div>
<div class="card-text">
<p>Tekst 2</p>
</div>
</div>
<div class="card" data-card="2">
<div class="card-image"><img src="https://www.arohatours.co.nz/media/1509/coromandel-hahai.jpg?anchor=center&mode=crop&width=600&height=450&rnd=131772666290000000&quality=80" />
</div>
<div class="card-text">
<p>Tekst 3</p>
</div>
</div>
<div class="card" data-card="3">
<div class="card-image"><img src="https://www.arohatours.co.nz/media/1509/coromandel-hahai.jpg?anchor=center&mode=crop&width=600&height=450&rnd=131772666290000000&quality=80" />
</div>
<div class="card-text">
<p>Tekst 4</p>
</div>
</div>
<div class="card" data-card="4">
<div class="card-image"><img src="https://www.arohatours.co.nz/media/1509/coromandel-hahai.jpg?anchor=center&mode=crop&width=600&height=450&rnd=131772666290000000&quality=80" />
</div>
<div class="card-text">
<p>Tekst 5</p>
</div>
</div>
</div>
</div>
关于javascript - 当父元素具有属性pointer-events : none?时,如何使子元素打开链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59968572/
我目前正在寻找一些关于 jQuery 的建议,因为我认为我做错了,即使我得到了我想要的结果。 我想在更改时将输入的值更改为最接近的具有 .milestone 类的输入的值。我想要更改的输入是保持输入,
我已经阅读有关绑定(bind)、调用、申请的文章近一周了,对我来说仍然很复杂。我想我写的这个 jsfiddle 需要它们。然而,我没能做到,因为我仍然很困惑。 我尽力写了一些我上周从遇到这个问题的开发
我有一个项目生成代码。生成时间真的很长,所以我把它分成了多个项目,每个项目产生了整体的 20%。原始 POM 成为“父 POM”,子项依赖于它,仅包含一个单独的 Artifact ID 和一两个更改的
我正在使用局部 View 来创建父 subview 。我最理想的是父 View 上的提交按钮,用于保存子值。 我有以下模型。 public class Course { public int
我刚刚开始学习Rust,并且在理解所有权如何在我的案例中遇到一些麻烦: use std::ops::IndexMut; // =====================================
我是 JavaScript 新手,想了解更多有关它实例化父/子对象的顺序的信息。更具体地说,我想从编译器/浏览器的 Angular 理解以下代码片段。 var parent = { child:
我正在测试 Azure IaaS,并遇到了一个非常基本的问题。我有一个父 VHD 和子 VHD,已使用 csupload 将其作为页面 blob 上传,并且门户中显示图像和磁盘。然后我尝试将 pare
我的应用程序会定期为我坚持使用的对象请求更新 Core Data到网络服务。然后我需要更新我在主要上下文中拥有的对象(默认情况下 AppDelegate 中提供的对象)。编辑对象的不是用户,所以我需要
texT text text text text text 如何直接获取来自.menu ? 里面的 child 不应该采取。
我一直需要影响与其他元素相关的元素,但我的方法有点业余! 即到 // matched item where script is called from LINK 我使用; $(thi
我有两个表: 父子“类别”: id name parent_id 1 Food NULL 2 Pizza 1 3 Pasta
Linux 上的 Python 2.7.6。 我正在使用从父级继承的测试类。父类保存了许多子类共有的许多字段,我需要调用父类的 setUp 方法来初始化这些字段。调用 ParentClass.setU
我有一个处理图像、相册和相册类别的数据库。 一个专辑可以有多个专辑(子专辑),并且只有 1 级深度。 一张专辑仅属于一个专辑类别。 在这里做了一些研究,我相信最合适的数据库模型是这个 album_ca
我有一个关键字表,其中每个关键字都分配有一个 ID,并且是唯一的。我有第二个表,将父关键字的 ID 链接到子关键字的 ID。一个关键字最多可以有大约 800 个 child 或根本没有。 child
我经常使用这个 CSS 选择器 parent>child。我的设计在 Mozilla 和 Opera 中看起来不错。 但在 IE 中,它很糟糕。我知道 > 在 IE 中无法识别,但在 IE 中有什么替
我一直在用一个父对象构建一个系统,它在其中创建各种子对象,每个子对象都需要一个主对象才能运行。现在,到目前为止,我一直在创建 shared_ptr和 Child* ,所以当 Parent 和 所有 C
我从以下两个类中收到序列化兼容性错误。只有父类CommericalCustomer 实现了序列化。当具有如下所示的父/子关系时,使用可序列化接口(interface)的正确方法是什么? public
我正在开发一个程序并学习父/子进程。目前我的子进程是 exit(variable); 在我的 main() 中我有: signal(SIGCHLD, chldHandler); 在我的 main()
考虑以下两个具体类: public class A { protected void foo() { System.out.println("A foo"); bar
所以,我正在尝试建立这样的父/子类关系: class ParentClass where C : ChildClass { public void AddChild(C child)
我是一名优秀的程序员,十分优秀!