当前位置:首页 > JavaScript

js实现倒影

2026-03-14 04:29:24JavaScript

使用 CSS -webkit-box-reflect 实现倒影

CSS 原生提供 -webkit-box-reflect 属性可直接为元素创建倒影。需注意浏览器兼容性(主要支持 WebKit 内核浏览器如 Chrome/Safari):

.target-element {
  -webkit-box-reflect: below 10px linear-gradient(transparent, rgba(0, 0, 0, 0.3));
}
  • below 10px 表示倒影出现在元素下方 10px 处
  • linear-gradient 控制倒影渐变效果

通过 Canvas 动态生成倒影

适用于需要动态控制倒影效果的场景:

function createReflection(elementId) {
  const canvas = document.createElement('canvas');
  const img = document.getElementById(elementId);
  canvas.width = img.width;
  canvas.height = img.height * 0.6; // 倒影高度

  const ctx = canvas.getContext('2d');
  ctx.translate(0, img.height);
  ctx.scale(1, -0.6); // 垂直翻转并压缩

  ctx.drawImage(img, 0, 0, img.width, img.height);
  ctx.globalCompositeOperation = 'destination-out';

  const gradient = ctx.createLinearGradient(0, 0, 0, img.height);
  gradient.addColorStop(0, 'rgba(0,0,0,0.7)');
  gradient.addColorStop(1, 'rgba(0,0,0,0)');
  ctx.fillStyle = gradient;
  ctx.fillRect(0, 0, img.width, img.height);

  return canvas;
}

SVG 实现方案

利用 SVG 的滤镜效果创建更复杂的倒影:

<svg>
  <filter id="reflect" x="0" y="0" width="1" height="1">
    <feGaussianBlur in="SourceAlpha" stdDeviation="2"/>
    <feOffset dy="5" result="offsetblur"/>
    <feComponentTransfer>
      <feFuncA type="linear" slope="0.5"/>
    </feComponentTransfer>
    <feMerge>
      <feMergeNode/>
      <feMergeNode in="SourceGraphic"/>
    </feMerge>
  </filter>
</svg>

纯 JavaScript 实现方案

通过 DOM 操作复制元素并应用变换:

js实现倒影

function createDomReflection(element) {
  const clone = element.cloneNode(true);
  clone.style.transform = 'scaleY(-1)';
  clone.style.opacity = '0.5';
  clone.style.filter = 'blur(2px)';
  element.parentNode.appendChild(clone);
  return clone;
}

注意事项

  • 性能考虑:CSS 方案性能最优,Canvas 适合动态内容
  • 浏览器兼容:-webkit-box-reflect 需前缀,现代浏览器支持 Canvas/SVG
  • 交互处理:倒影元素可能需要额外事件处理
  • 移动端适配:高分辨率设备需调整模糊度参数

标签: 倒影js
分享给朋友:

相关文章

js实现vue

js实现vue

Vue.js 的基本实现方法 在 JavaScript 中实现 Vue.js 的功能,可以通过直接引入 Vue 库或使用现代构建工具(如 Vite 或 Webpack)。以下是几种常见的实现方式:…

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…