当前位置:首页 > 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实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…