HTML、CSS、JS实现水印效果

实现效果如下:

在这里插入图片描述
HTML

<body>
  <div class="box" id="box">
  </div>
</body>

CSS

  <style>
    .box {
      width: 800px;
      height: 600px;
      margin: 0 auto;
      border: 2px solid #ccc;
      position: relative;
    }
  </style>

JS

<script>
  function cssHelper(el, prototype) {
    for (let i in prototype) {
      el.style[i] = prototype[i]
    }
  }
  // 获取要放水印的box的宽高以及位置
  const {
    offsetLeft,
    offsetTop,
    clientWidth,
    clientHeight
  } = document.getElementById("box");

  const waterWrapper = document.createElement('div');
  cssHelper(waterWrapper, {
    position: 'fixed',
    width: `${clientWidth}px`, //宽度与box相同
    height: `${clientHeight}px`, //高度与box相同
    top: `${offsetTop}px`, //定位,top
    right: '0px ',
    bottom: '0px',
    left: `${offsetLeft}px`, //定位,left
    overflow: 'hidden',
    display: 'flex',
    'flex-wrap': 'wrap',
    'pointer-events': 'none'
  })
  const waterHeight = 100;
  const waterWidth = 200;
  // 计算有多少个水印
  const column = Math.ceil(clientWidth / waterWidth);
  const rows = Math.ceil(clientHeight / waterHeight);

  function createItem() {
    const item = document.createElement('div')
    // 水印内容,可更改
    item.innerHTML = '测试水印效果'
    cssHelper(item, {
      position: 'absolute',
      top: `50px`,
      left: `50px`,
      fontSize: `20px`, //水印字体大小
      color: 'red', //水印的颜色
      lineHeight: 1.5,
      opacity: 0.1,
      transform: `rotate(-15deg)`,
      transformOrigin: '0 0',
      userSelect: 'none',
      whiteSpace: 'nowrap',
      overflow: 'hidden',
    })
    return item
  }
  for (let i = 0; i < column * rows; i++) {
    const wrap = document.createElement('div');
    cssHelper(wrap, Object.create({
      position: 'relative',
      width: `${waterWidth}px`,
      height: `${waterHeight}px`,
      flex: `0 0 ${waterWidth}px`,
      overflow: 'hidden',
    }));
    wrap.appendChild(createItem());
    waterWrapper.appendChild(wrap)
  }
  document.getElementById("box").appendChild(waterWrapper)
</script>
可根据放水印的容器自由变换
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值