css动画 实现点击重叠图片后平铺

想使用vue实现css动画:将所有图片先都重合,当点击首层图片时,折叠的图片再全部展开,实现图片的平铺

通过js改变样式处理

img

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .wrap .img {
            width: 200px;
            height: 200px;
            border: 1px solid teal;
            position: absolute;
        }
        .wrap.tile .img {
            position: static;
            display: inline-block;
        }
    </style>
</head>
<body>
    <div class="wrap">
        <div class="img"></div>
        <div class="img"></div>
        <div class="img"></div>
        <div class="img"></div>
        <div class="img"></div>
    </div>
    <script>
        var wrap = document.querySelector('.wrap')
        wrap.onclick = function() {
            wrap.className = 'wrap tile'
        }
    </script>
</body>
</html>
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7538277
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:vue中的css动画效果
  • 除此之外, 这篇博客: vue 使用第三方css动画库中的 使用第三方css动画库 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    https://cn.vuejs.org/v2/guide/transitions.html

    注意:vue 和 animate.css 版本兼容性问题导致动画不起作用
    Vue 官网引用的是 animate.css 3.5 版本
    不能引用 animate.css 最新版本 例如:(4.0)

    https://www.cnblogs.com/cntian/p/13292041.html
    自定义过渡类名:duration :过渡持续时间(以毫秒计)

    1. 导入动画类库:
    <link rel="stylesheet" type="text/css" href="./lib/animate.css">
    
    1. 定义 transition 及属性:
    <transition
    	enter-active-class="fadeInRight"
        leave-active-class="fadeOutRight"
        :duration="{ enter: 500, leave: 800 }"> 
      	<div class="animated" v-show="isshow">动画哦</div>
    </transition>
    
    <div style="margin:0 auto;width:300px;">
    		       	<button @click="show=!show">toggle</button>
    			  	<transition name="one" 
    			  		enter-active-class="animated fadeOutLeft"
    	                leave-active-class="animated bounceOutRight"
    	                :duration="{ enter: 1000, leave: 500 }">
    			  		<p v-show="show">toggle</p>
    			  	</transition>
    	       </div>
    

    注意:同时使用过渡和动画

    但是,在一些场景中,你需要给同一个元素同时设置两种过渡动效,比如 animation 很快的被触发并完成了,而 transition 效果还没结束。在这种情况中,你就需要使用 type 特性并设置 animation 或 transition 来明确声明你需要 Vue 监听的类型。
    https://www.haoht123.com/2330.html

  • 您还可以看一下 张明星老师的2021新版HTML5+CSS3+JS+Vue精细化教程课程中的 04-05-CSS-背景颜色背景图片小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    根据问题描述,在Vue中实现点击后图片的平铺效果,可以按照以下步骤进行实现:

    1. 首先,在Vue的组件中定义一个变量(例如show),用来表示图片是否被点击,初始值为false

    2. 在模板中添加图片的展示区域,并使用v-if指令根据show变量来决定是否显示图片。

    <template>
      <div>
        <img src="path/to/image.jpg" @click="showImage" v-if="show">
        <div class="overlay" v-else @click="showImage"></div>
      </div>
    </template>
    
    1. data属性中添加变量show,并在methods属性中添加方法showImage,用于改变show的值。
    <script>
    export default {
      data() {
        return {
          show: false
        };
      },
      methods: {
        showImage() {
          this.show = !this.show;
        }
      }
    };
    </script>
    
    1. 添加CSS样式来定义点击后的展开效果。可以使用Vue提供的transition组件来实现过渡效果。通过添加enter-active-classleave-active-class属性来定义图像的平铺和折叠动画效果。
    <template>
      <div>
        <transition name="expand">
          <img src="path/to/image.jpg" @click="showImage" v-if="show">
        </transition>
        <div class="overlay" v-else @click="showImage"></div>
      </div>
    </template>
    
    <style>
    .expand-enter-active {
      animation: expand 0.5s;
    }
    .expand-leave-active {
      animation: collapse 0.5s;
    }
    
    @keyframes expand {
      from {
        transform: scale(0);
      }
      to {
        transform: scale(1);
      }
    }
    
    @keyframes collapse {
      from {
        transform: scale(1);
      }
      to {
        transform: scale(0);
      }
    }
    </style>
    
    1. 最后,在mounted钩子中,添加初始化样式的代码,确保初始时所有图片都重叠在一起。
    <script>
    export default {
      data() {
        return {
          show: false
        };
      },
      methods: {
        showImage() {
          this.show = !this.show;
        }
      },
      mounted() {
        // 初始化样式,确保初始时所有图片都重叠在一起
        // 可以使用CSS或者JavaScript来实现,具体方法根据需要选择
      }
    };
    </script>
    

    以上就是使用Vue实现点击后图片的平铺效果的具体步骤和代码示例。请根据实际情况进行调整和定制。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^