记录--前端实现翻转图像

这篇具有很好参考价值的文章主要介绍了记录--前端实现翻转图像。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

记录--前端实现翻转图像

翻转图像是在视觉上比较两个不同图像的常用方法。单击其中一个将翻转它,并显示另一个图像。

布局

布局结构如下:

<div class="flipping-images">
    <div class="flipping-images__inner">
        <div class="flipping-images__side flipping-images__side--front">
            <!-- The image shown on the front -->
            <img class="flipping-images__img" src="..." />
        </div>

        <div class="flipping-images__side flipping-images__side--back">
            <!-- The image shown on the back -->
            <img class="flipping-images__img" src="..." />
        </div>
    </div>
</div>

它有正面和背面两面,放置在内部容器内。我们希望它们彼此重叠。最好的方法是使用容器 relative 的样式,并绝对定位它们。

.flipping-images__inner {
    /* Take full size of the root element */
    height: 100%;
    width: 100%;

    position: relative;
}

.flipping-images__side {
    /* Take full size of the inner container */
    height: 100%;
    width: 100%;

    /* Absolute position */
    position: absolute;
    top: 0;
    left: 0;
}

最初,正面显示在背面的上部。用户在单击正面之前不会看到背面。这就是 z-index 该属性派上用场的地方。

.flipping-images__side--back {
    z-index: 1;
}

.flipping-images__side--front {
    z-index: 2;
}

图像必须适合其侧面。在不显式设置 width 和 height 属性的情况下,我们可以使用 object-fit 属性将图像完美地放入每一侧:

.flipping-images__img {
    /* Take the full height */
    height: 100%;

    /* But don't exceed the side's width */
    max-width: 100%;

    /* Fit within each side */
    object-fit: cover;
}

内部居中

我们希望在根元素的中心显示内部容器。使用三个 CSS flexbox 属性的组合将使我们能够做到这一点:

.flipping-images {
    /* Center the content */
    align-items: center;
    display: flex;
    justify-content: center;
}

此外,我们还需要设置内容器的宽度。它必须与图像的宽度相同。我们可以处理其中一个图像 load 的事件,然后确定其宽度:

const handleLoad = (e) => {
    const imageEle = e.target;

    // Get the image's width
    const width = imageEle.getBoundingClientRect().width;

    // Assume `innerEle` represents the inner container
    innerEle.style.width = `${width}px`;
};


// Assume `containerEle` represents the root element
containerEle.querySelector('.flipping-images__img').addEventListener('load', handleLoad);

动画

为了获取您在本文开头看到的动画,我们需要在用户单击内部容器时旋转它。我们创建了一个翻转变体,将内部容器在垂直方向上旋转 180 度:

.flipping-images__inner {
    transition: transform 800ms;
}


.flipping-images__inner--flip {
    transform: rotateY(180deg);
}

当用户单击内部容器时,我们会切换翻转变体:

// Assume `innerEle` represents the inner container
innerEle.addEventListener('click', () => {
    innerEle.classList.toggle('flipping-images__inner--flip');
});

但是,结果是实际上只有第一个图像被旋转。背面的第二张图像仍处于隐藏状态。为了用背面替换正面,我们需要更多额外的样式:

.flipping-images__inner {
    transform-style: preserve-3d;
}

.flipping-images__side {
    backface-visibility: hidden;
}

这两个声明都是必需的。否则,当正面旋转时,无法看到背面。最后,由于我们旋转了内部容器,导致背面也旋转了。因此,我们必须反转旋转:

.flipping-images__side--back {
    transform: rotateY(-180deg);
}

3D动画

到目前为止,图像在内部容器内翻转。这种 perspective 将使我们有能力使翻转看起来像 3D 动画。

.flipping-images {
    perspective: 1000px;
}

如果 perspective 的值是内部容器宽度的两倍,则效果最佳。我们可以在上一节中提到的 load 事件处理程序中执行此操作:

const handleLoad = (e) => {
    const imageEle = e.target;

    // Get the image's width
    const width = imageEle.getBoundingClientRect().width;

    // Assume `containerEle` represents the root element
    containerEle.style.perspective = `${2 * width}px`;
};

水平翻转

我们使用该 rotateY 函数在垂直方向上翻转图像。如果要将翻转方向更改为水平,则可以使用该 rotateX 功能。

.flipping-images__inner--flip {
    transform: rotateX(180deg);
}

.flipping-images__side--back {
    transform: rotateX(-180deg);
}

本文转载于:

https://juejin.cn/post/7325389178926743587

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 记录--前端实现翻转图像文章来源地址https://www.toymoban.com/news/detail-805682.html

到了这里,关于记录--前端实现翻转图像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV中的图像旋转和翻转如何实现?

    在OpenCV中,可以使用函数来实现图像的旋转和翻转。下面是一种常用的方法: 图像旋转: 图像旋转可以通过函数 cv2.warpAffine() 来实现。这个函数可以根据指定的旋转角度、旋转中心和图像尺寸来进行图像的旋转。 示例代码: 图像翻转: 图像翻转可以通过函数 cv2.flip() 来实

    2024年02月13日
    浏览(47)
  • 分享一个500页面给大家

    先看效果: 再看代码:

    2024年02月06日
    浏览(54)
  • 分享一个403界面给大家

    先看效果图(说明:小鬼影会飘来飘去,长时间停留会有小惊喜,具体大家跑一下就知道): 代码如下: PS:发现我用文字写太生硬了,干的噎嗓子,干脆在代码里加注释了。

    2024年02月06日
    浏览(46)
  • Python图像处理丨图像缩放、旋转、翻转与图像平移

    摘要: 本篇文章主要讲解Python调用OpenCV实现图像位移操作、旋转和翻转效果,包括四部分知识:图像缩放、图像旋转、图像翻转、图像平移。 本文分享自华为云社区《[Python图像处理] 六.图像缩放、图像旋转、图像翻转与图像平移》,作者:eastmount 。 本篇文章主要讲解Pyth

    2024年02月06日
    浏览(57)
  • 图像的翻转

    在OpenCV中,图像翻转是一种常见的图像处理操作,用于改变图像的方向或视角。它可以水平翻转图像、垂直翻转图像或同时进行水平和垂直翻转。 作用和意义: 数据增强:图像翻转是数据增强的一种方式,可以增加训练数据的多样性,提高模型的泛化能力。 校正镜像:有时

    2024年02月10日
    浏览(23)
  • 分享三个ai写作生成器给大家

    在当今数字化时代,随着人工智能的快速发展,ai写作软件已经成为越来越多人关注的热门话题。这些创新的软件利用机器学习和自然语言处理等技术,能够生成一些好的文章、博客、新闻稿甚至小说等内容,大大地提升了写作的效率和质量。然而,面对众多的ai写作软件选择

    2024年02月16日
    浏览(58)
  • OpenCV-18图像的翻转和旋转

    一、图像的翻转 使用API---cv.flip(src, flipCode) flipCode = 0表示上下翻转 flipCode 0表示左右翻转 flipCode 0上下 + 左右翻转 或者使用np的翻转src[: : -1,: : -1]实现上下翻转。 示例代码如下: 输出结果如下: 二、图像的旋转 使用API ---cv2.rotate(img, rotateCode) ROTATE_90_CLOCKWISE    90度顺

    2024年02月02日
    浏览(52)
  • 必做的高收益自媒体平台,分享给大家

    现在市面上的自媒体平台是非常多的,大大小小加起来也有30好几个,但是要说到哪些平台收益比较高,那就不得不提到下面这个几个主流平台,今天就给大家分享一下收益比较高的几个主流平台。 第一个:百家号 百家号平台目前的收益单价在众多自媒体平台来说真的算是非

    2024年02月12日
    浏览(38)
  • 这几个ai写作生成器分享给大家

    大家知道吗,现在市场有许多ai写作软件,它们已经能够模仿人类的写作风格,帮大家轻松地生成文章。我对于非常感兴趣,于是就上网查了一下有可以ai写作的软件吗?结果真的找到几款不错的软件,今天借这个机会我将它们分享给你。 以下是今天分享的ai写作软件 一:A

    2024年02月15日
    浏览(57)
  • opencv 图像的缩放(放大,缩小),翻转,旋转

    opencv 图像的缩放(放大,缩小),翻转,旋转 opencv 最常用的图像缩放方法是使用 cv2::resize() 函数,它需要指定输出图像的大小,和插值算法; opencv 最常用的图像翻转方法是使用 cv::flip() 函数,它需要指定图像翻转方式; opencv 最常用的图像旋转方法是使用 cv::warpAffine() 函数,

    2024年02月07日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包