当前位置: 首页 > article >正文

Vue.js组件开发-实现图片浮动效果

使用Vue实现图片浮动效果

实现思路

将使用Vue的单文件组件(.vue)来实现图片浮动效果。主要思路是通过CSS的transform属性结合JavaScript的定时器来改变图片的位置,从而实现浮动效果。

代码实现

<template>
  <!-- 定义一个包含图片的容器 -->
  <div class="image-float-container">
    <!-- 绑定图片的样式,使用内联样式动态设置图片的位置 -->
    <img :style="{ transform: `translate(${xOffset}px, ${yOffset}px)` }" src="https://via.placeholder.com/200" alt="Floating Image">
  </div>
</template>

<script>
export default {
  data() {
    return {
      // 初始化图片在x轴上的偏移量
      xOffset: 0,
      // 初始化图片在y轴上的偏移量
      yOffset: 0,
      // 定时器ID,用于后续清除定时器
      animationInterval: null
    };
  },
  mounted() {
    // 当组件挂载到DOM后,开始动画
    this.startAnimation();
  },
  beforeUnmount() {
    // 在组件销毁前,清除定时器,避免内存泄漏
    this.stopAnimation();
  },
  methods: {
    startAnimation() {
      // 设置一个定时器,每隔30毫秒执行一次动画函数
      this.animationInterval = setInterval(() => {
        // 调用更新偏移量的函数
        this.updateOffsets();
      }, 30);
    },
    stopAnimation() {
      // 清除定时器
      clearInterval(this.animationInterval);
    },
    updateOffsets() {
      // 定义一个随机偏移量的范围
      const maxOffset = 10;
      // 生成一个介于 -maxOffset 到 maxOffset 之间的随机数,更新x轴偏移量
      this.xOffset += (Math.random() * 2 - 1) * 0.5;
      // 生成一个介于 -maxOffset 到 maxOffset 之间的随机数,更新y轴偏移量
      this.yOffset += (Math.random() * 2 - 1) * 0.5;

      // 限制x轴偏移量在 -maxOffset 到 maxOffset 之间
      this.xOffset = Math.max(-maxOffset, Math.min(maxOffset, this.xOffset));
      // 限制y轴偏移量在 -maxOffset 到 maxOffset 之间
      this.yOffset = Math.max(-maxOffset, Math.min(maxOffset, this.yOffset));
    }
  }
};
</script>

<style scoped>
.image-float-container {
  /* 设置容器的宽度和高度 */
  width: 200px;
  height: 200px;
  /* 设置容器的相对定位,以便图片可以相对于容器进行定位 */
  position: relative;
  /* 隐藏溢出的内容 */
  overflow: hidden;
}

.image-float-container img {
  /* 设置图片的宽度和高度为100%,使其填满容器 */
  width: 100%;
  height: 100%;
  /* 设置图片的绝对定位,以便可以通过偏移量来移动图片 */
  position: absolute;
  /* 设置过渡效果,使图片的移动更加平滑 */
  transition: transform 0.3s ease-in-out;
}
</style>

代码解释

  1. 模板部分(<template>

    • 定义了一个包含图片的容器image-float-container
    • 使用v-bind指令动态绑定图片的transform样式,根据xOffsetyOffset的值来改变图片的位置。
  2. 脚本部分(<script>

    • data函数返回组件的数据,包括xOffsetyOffsetanimationInterval
    • mounted钩子函数在组件挂载到DOM后调用startAnimation方法开始动画。
    • beforeUnmount钩子函数在组件销毁前调用stopAnimation方法清除定时器,避免内存泄漏。
    • startAnimation方法设置一个定时器,每隔30毫秒调用一次updateOffsets方法。
    • stopAnimation方法清除定时器。
    • updateOffsets方法生成随机的偏移量,并更新xOffsetyOffset的值,同时限制偏移量的范围。
  3. 样式部分(<style>

    • .image-float-container类设置容器的宽度、高度、定位和溢出处理。
    • .image-float-container img类设置图片的宽度、高度、定位和过渡效果,使图片的移动更加平滑。

使用说明

  1. 创建Vue项目:使用Vue CLI创建一个新的项目:
npm install -g @vue/cli
vue create my-project
cd my-project
  1. 替换组件代码:将上述代码复制到src/components目录下的一个新的.vue文件中,例如FloatingImage.vue

  2. App.vue中使用组件

<template>
  <div id="app">
    <!-- 引入并使用浮动图片组件 -->
    <FloatingImage />
  </div>
</template>

<script>
// 导入浮动图片组件
import FloatingImage from './components/FloatingImage.vue';

export default {
  components: {
    FloatingImage
  }
};
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>
  1. 运行项目:在终端中运行以下命令启动开发服务器:
npm run serve

http://www.kler.cn/a/529966.html

相关文章:

  • MySQL基础-多表查询
  • LeetCode435周赛T2贪心
  • w186格障碍诊断系统spring boot设计与实现
  • C++【深入底层,手撕vector】
  • Unity实现按键设置功能代码
  • C_C++输入输出(下)
  • Docker 部署 Starrocks 教程
  • 为什么就Kafka有分区?
  • Electricity Market Optimization 探索系列(二)
  • 力扣 84. 柱状图中最大的矩形
  • PaddleOCR 截图自动文字识别
  • JavaWeb入门-请求响应(Day3)
  • Kafka SASL/SCRAM介绍
  • 缓存的今生今世
  • python-leetcode-二叉树的右视图
  • 【算法】回溯算法专题② ——组合型回溯 + 剪枝 python
  • 31.Word:科技论文的译文审交稿【31】
  • Vue - Suspense的使用
  • AWS EMR使用Apache Kylin快速分析大数据
  • 第三篇:模型压缩与量化技术——DeepSeek如何在边缘侧突破“小而强”的算力困局
  • 《Origin画百图》之脊线图
  • 精品PPT | 企业大数据治理平台统一指标库建设方案
  • IM 即时通讯系统-51-MPush开源实时消息推送系统
  • 手写单层RNN网络,后续更新
  • K8S集群架构及主机准备
  • SQL索引优化_提高系统响应速度的秘诀