当前位置:首页 > JavaScript

js实现图片上下浮动

2026-01-31 05:29:03JavaScript

使用 CSS 动画实现图片上下浮动

通过 CSS 的 @keyframesanimation 属性可以实现图片上下浮动的效果。这种方法性能较好,适合简单的动画需求。

.floating-image {
  animation: float 3s ease-in-out infinite;
}

@keyframes float {
  0%, 100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(-20px);
  }
}
<img src="your-image.jpg" class="floating-image">

使用 JavaScript 实现更复杂的浮动效果

如果需要更复杂的控制,可以使用 JavaScript 动态改变图片的位置。以下是一个使用 requestAnimationFrame 的实现方式:

const image = document.querySelector('.floating-image');
let position = 0;
let direction = 1;
const speed = 0.05;
const range = 20;

function floatImage() {
  position += speed * direction;

  if (position > range || position < -range) {
    direction *= -1;
  }

  image.style.transform = `translateY(${position}px)`;
  requestAnimationFrame(floatImage);
}

floatImage();

添加缓动效果增强动画自然感

为了使浮动更加自然,可以添加正弦函数的缓动效果:

const image = document.querySelector('.floating-image');
let time = 0;
const speed = 0.01;
const range = 20;

function floatImage() {
  time += speed;
  const position = Math.sin(time) * range;

  image.style.transform = `translateY(${position}px)`;
  requestAnimationFrame(floatImage);
}

floatImage();

响应式浮动效果

可以根据窗口大小调整浮动幅度:

const image = document.querySelector('.floating-image');
let time = 0;
const speed = 0.01;

function getRange() {
  return window.innerHeight * 0.05; // 浮动范围为视口高度的5%
}

function floatImage() {
  time += speed;
  const position = Math.sin(time) * getRange();

  image.style.transform = `translateY(${position}px)`;
  requestAnimationFrame(floatImage);
}

window.addEventListener('resize', () => {
  // 窗口大小改变时重新计算浮动范围
});

floatImage();

多图片不同步浮动效果

如果需要多个图片以不同速度浮动:

js实现图片上下浮动

const images = document.querySelectorAll('.floating-image');

images.forEach((img, index) => {
  let time = index * 0.5; // 每个图片不同的起始时间
  const speed = 0.01 + index * 0.002; // 每个图片不同的速度
  const range = 15 + index * 5; // 每个图片不同的浮动范围

  function floatImage() {
    time += speed;
    const position = Math.sin(time) * range;

    img.style.transform = `translateY(${position}px)`;
    requestAnimationFrame(floatImage);
  }

  floatImage();
});

以上方法可以根据具体需求选择使用,CSS 动画适合简单场景,JavaScript 实现则提供更多控制和灵活性。

标签: 上下图片
分享给朋友:

相关文章

js图片轮播的实现

js图片轮播的实现

基础图片轮播实现 使用HTML、CSS和JavaScript实现一个简单的图片轮播效果。HTML部分定义轮播容器和图片,CSS负责样式和过渡效果,JavaScript处理逻辑。 <div cl…

vue实现无缝图片

vue实现无缝图片

实现无缝图片轮播的方法 在Vue中实现无缝图片轮播,可以通过以下步骤完成。这种方法利用Vue的响应式特性和CSS动画,确保图片切换平滑且无缝。 使用vue-awesome-swiper库 安装vue…

vue实现图片加载

vue实现图片加载

Vue 实现图片加载的方法 在 Vue 中实现图片加载可以通过多种方式,以下是一些常见的方法: 使用 v-bind 绑定图片路径 通过 v-bind 动态绑定图片路径,可以灵活地加载本地或远程图片。…

js实现图片拖动

js实现图片拖动

实现图片拖动的步骤 使用JavaScript实现图片拖动功能,可以通过HTML5的拖放API结合事件监听实现。以下是具体方法: 设置HTML结构 为图片添加draggable属性,并设置唯一ID以便…

js实现图片拖拽

js实现图片拖拽

实现图片拖拽的基本步骤 HTML 结构需要包含可拖拽的图片元素,并设置 draggable 属性为 true: <img id="dragImage" src="image.jpg" drag…

js实现保存图片

js实现保存图片

使用Canvas绘制并保存图片 在HTML中创建一个Canvas元素,通过JavaScript绘制内容后转换为图片并保存。Canvas的toDataURL方法可将画布内容转为Base64编码的图片数据…