javascript - 卡片翻转悬停并单击

标签 javascript jquery html css

我有一张既可以悬停也可以点击的卡片;但是,有一个小故障。

当单击卡片然后从前面悬停时,悬停不会按预期工作。它正在翻转回到前面。悬停只有在悬停时才能从后面正确实现。

为了在没有悬停故障的情况下正确实现代码,我缺少什么?

请帮助解决这个问题。

document.querySelector(".card-flip").classList.toggle("flip");
$('.card-flip').bind({
  click: function() {
    $('.card-flip .card').toggleClass('flip');
  }
});
.card-flip {
  -webkit-perspective: 1000px;
  perspective: 1000px;
}

.card-flip:hover .flip, .card-flip.hover .flip {
  -webkit-transform: rotateY(180deg);
  transform: rotateY(180deg);
}

.card-flip,
.front,
.back {
  width: 100%;
  height: 480px;
  -webkit-transform-style: preserve-3d;
}

.flip {
  transition: 0.6s;
  -webkit-transform-style: preserve-3d;
  transform-style: preserve-3d;
  position: relative;
}

.front,
.back {
  -webkit-backface-visibility: hidden;
  backface-visibility: hidden;
  position: absolute;
  top: 0;
  left: 0;
}

.front {
  z-index: 2;
  transform: rotateY(0deg);
  -webkit-transform: rotateY(0deg);
}

.back {
  -webkit-transform: rotateY(180deg);
  transform: rotateY(180deg);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.8.3/modernizr.min.js"></script>
<link rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css'>
<section style="height:40px;">&nbsp;</section>
</head>
<body>
    <section>
        <div class="container">
            <div class="row">
                <div class="col-sm-6 col-lg-4">
                    <!-- Card Flip -->
                    <div class="card-flip">
                        <div class="flip">
                            <div class="front">
                                <!-- front content -->
                                <div class="card">
                                    <img class="card-img-top" data-src="holder.js/100px180/" alt="100%x180" style="height: 180px; width: 100%; display: block;" data-holder-rendered="true">
                                    <div class="card-block">
                                        <h4 class="card-title">Front Card</h4>
                                        <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
                                        <a href="#" class="btn btn-primary">Go somewhere</a>
                                    </div>
                                </div>
                            </div>
                            <div class="back">
                                <!-- back content -->
                                <div class="card">
                                    <div class="card-block">
                                        <h4 class="card-title">Back Card</h4>
                                        <h6 class="card-subtitle text-muted">Support card subtitle</h6>
                                    </div>
                                    <img data-src="holder.js/100px180/?text=Image" alt="Image [100%x180]" data-holder-rendered="true" style="height: 180px; width: 100%; display: block;">
                                    <div class="card-block">
                                        <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>

                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                    <!-- End Card Flip -->
                </div>
            </div>
        </div>
    </section>
    <script src='https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js'></script>
    <script src='https://cdnjs.cloudflare.com/ajax/libs/tether/1.3.7/js/tether.min.js'></script>
    <script src='https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/js/bootstrap.min.js'></script>
    <script src='https://cdnjs.cloudflare.com/ajax/libs/holder/2.9.4/holder.min.js'></script>
</body>

最佳答案

您将不得不使用鼠标事件。

选项 1:

添加mouseentermouseleave 事件。 (不要依赖 CSS,在鼠标事件上添加/删除 flip 类)

document.querySelector(".card-flip").classList.toggle("flip");
$('.card-flip').bind({
  click: function() {
    $('.card-flip .flip').toggleClass('flip-hover');
  },
  mouseenter: function() {
    $('.card-flip .flip').addClass('flip-hover');
  },
  mouseleave: function() {
    $('.card-flip .flip').removeClass('flip-hover');
  }
});
.card-flip {
  -webkit-perspective: 1000px;
  perspective: 1000px;
}

.card-flip .flip-hover {
  -webkit-transform: rotateY(180deg);
  transform: rotateY(180deg);
}

.card-flip,
.front,
.back {
  width: 100%;
  height: 480px;
  -webkit-transform-style: preserve-3d;
}

.flip {
  transition: 0.6s;
  -webkit-transform-style: preserve-3d;
  transform-style: preserve-3d;
  position: relative;
}

.front,
.back {
  -webkit-backface-visibility: hidden;
  backface-visibility: hidden;
  position: absolute;
  top: 0;
  left: 0;
}

.front {
  z-index: 2;
  transform: rotateY(0deg);
  -webkit-transform: rotateY(0deg);
}

.back {
  -webkit-transform: rotateY(180deg);
  transform: rotateY(180deg);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.8.3/modernizr.min.js"></script>
<link rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css'>
<section style="height:40px;">&nbsp;</section>
</head>
<body>
    <section>
        <div class="container">
            <div class="row">
                <div class="col-sm-6 col-lg-4">
                    <!-- Card Flip -->
                    <div class="card-flip">
                        <div class="flip">
                            <div class="front">
                                <!-- front content -->
                                <div class="card">
                                    <img class="card-img-top" data-src="holder.js/100px180/" alt="100%x180" style="height: 180px; width: 100%; display: block;" data-holder-rendered="true">
                                    <div class="card-block">
                                        <h4 class="card-title">Front Card</h4>
                                        <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
                                        <a href="#" class="btn btn-primary">Go somewhere</a>
                                    </div>
                                </div>
                            </div>
                            <div class="back">
                                <!-- back content -->
                                <div class="card">
                                    <div class="card-block">
                                        <h4 class="card-title">Back Card</h4>
                                        <h6 class="card-subtitle text-muted">Support card subtitle</h6>
                                    </div>
                                    <img data-src="holder.js/100px180/?text=Image" alt="Image [100%x180]" data-holder-rendered="true" style="height: 180px; width: 100%; display: block;">
                                    <div class="card-block">
                                        <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>

                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                    <!-- End Card Flip -->
                </div>
            </div>
        </div>
    </section>
    <script src='https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js'></script>
    <script src='https://cdnjs.cloudflare.com/ajax/libs/tether/1.3.7/js/tether.min.js'></script>
    <script src='https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/js/bootstrap.min.js'></script>
    <script src='https://cdnjs.cloudflare.com/ajax/libs/holder/2.9.4/holder.min.js'></script>
</body>

这是一个 fiddle 。 https://jsfiddle.net/nimittshah/gjhcwvk8/

选项 2:

如果你想在 CSS 中保留 hover,你仍然需要 mouseenter 事件。 (在 mouseenter 上添加 flip 类)

//document.querySelector(".card-flip").classList.toggle("flip");
$('.card-flip').bind({
  click: function() {
    $('.card-flip .flip-me').removeClass('flip');
  },
  mouseenter: function(){
    $('.card-flip .flip-me').addClass('flip');
  }
});
.card-flip {
  -webkit-perspective: 1000px;
  perspective: 1000px;
  transform: rotateY(0deg);
}

.card-flip:hover .flip, .card-flip.hover .flip {
  -webkit-transform: rotateY(180deg);
  transform: rotateY(180deg);
}

.card-flip,
.front,
.back {
  width: 100%;
  height: 480px;
  -webkit-transform-style: preserve-3d;
}

.flip-me {
  transition: 0.6s;
  -webkit-transform-style: preserve-3d;
  transform-style: preserve-3d;
  position: relative;
}

.front,
.back {
  -webkit-backface-visibility: hidden;
  backface-visibility: hidden;
  position: absolute;
  top: 0;
  left: 0;
}

.front {
  z-index: 2;
  transform: rotateY(0deg);
  -webkit-transform: rotateY(0deg);
}

.back {
  -webkit-transform: rotateY(180deg);
  transform: rotateY(180deg);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.8.3/modernizr.min.js"></script>
<link rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css'>
<section style="height:40px;">&nbsp;</section>
</head>
<body>
    <section>
        <div class="container">
            <div class="row">
                <div class="col-sm-6 col-lg-4">
                    <!-- Card Flip -->
                    <div class="card-flip">
                        <div class="flip-me flip">
                            <div class="front">
                                <!-- front content -->
                                <div class="card">
                                    <img class="card-img-top" data-src="holder.js/100px180/" alt="100%x180" style="height: 180px; width: 100%; display: block;" data-holder-rendered="true">
                                    <div class="card-block">
                                        <h4 class="card-title">Front Card</h4>
                                        <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
                                        <a href="#" class="btn btn-primary">Go somewhere</a>
                                    </div>
                                </div>
                            </div>
                            <div class="back">
                                <!-- back content -->
                                <div class="card">
                                    <div class="card-block">
                                        <h4 class="card-title">Back Card</h4>
                                        <h6 class="card-subtitle text-muted">Support card subtitle</h6>
                                    </div>
                                    <img data-src="holder.js/100px180/?text=Image" alt="Image [100%x180]" data-holder-rendered="true" style="height: 180px; width: 100%; display: block;">
                                    <div class="card-block">
                                        <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>

                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                    <!-- End Card Flip -->
                </div>
            </div>
        </div>
    </section>
    <script src='https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js'></script>
    <script src='https://cdnjs.cloudflare.com/ajax/libs/tether/1.3.7/js/tether.min.js'></script>
    <script src='https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/js/bootstrap.min.js'></script>
    <script src='https://cdnjs.cloudflare.com/ajax/libs/holder/2.9.4/holder.min.js'></script>
</body>

检查 fiddle 。 https://jsfiddle.net/nimittshah/gjhcwvk8/1/

仅供引用,我在 flip 类上添加了新类 flip-me

:)

关于javascript - 卡片翻转悬停并单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52823969/

相关文章:

javascript - 匹配不包含某个子串的子串

javascript - 使用事件触发器如何在输入更改时将值传递给函数

javascript - 在 javascript/jquery 中顺序解析 Promise

javascript - 隐藏菜单链接上的内容二次点击

javascript - 使用Javascript对随机生成的数字进行排序

javascript - 如何在 IntelliJ 中调试 Meteor

javascript - Flot:堆叠条形标签重叠/不显示

php - AJAX请求导致更改功能解除绑定(bind)

css - HTML5/CSS - <ol> 带有字母和括号?

html - 一次复制 HTML 表格,无需循环单元格