css 实现图片灰度

先看效果鼠标移入图片中摁下向左移动 图片由灰度变为原图   向右移动原图变灰度

 

 

代码如下:尚未做优化 

<style>
    *{
      margin:0;
      padding:0;
    }
    #img{
      width: 380px;
      height: 380px;
      background: url('https://mmbiz.qpic.cn/mmbiz_jpg/CbE2tPnf9Co6ibIibPzSUkAhHbUcKP4RXV4zY0SgzydNJGvBjVEPqdBW2W4uISVpZOB7icGxv0EhBkDc20BgW9eaQ/640?wx_fmt=jpeg') center/cover;
      overflow: hidden;
    }
    #test{
        mix-blend-mode: hue;
        width:380px;
        height:380px;
        position: relative;
        left:0;
    }
    img{
      height:380px;
      width:760px;
      position: relative;
      left:0px;
    }
</style>
</head>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<body >      
    <div id='img'>
        <div id="test">   
          <img src="test.png" alt="" draggable="false">        
        </div>
    </div>
     <script>
       let startX
       let offleft
       $('#img').mousedown((ev)=>{
          startX=$(ev)[0].clientX
          offleft = $('img').offset().left
          $('#img').bind('mousemove',Move) 
       })

       $('#img').mouseup(()=>{
        $('#img').unbind('mousemove',Move) 
            })
      function Move(ev){
            let endX=ev.clientX
            let  goX = startX - endX 
            let  go= offleft - goX
            $('img').css({"left": go+"px"})
            
      }   
    </script>
</body>

初始这个效果想利用svg 实现或者canvas 实现,但是这2中方案后来都被否决了,因为这个灰度相当于透明的遮罩层,通过遮罩层是图片看起来变灰色,如果使用多张图片也不好实现,最终找到了这个属性<blend-mode>:

混合模式是当层重叠时计算像素最终颜色值的方法,每种混合模式采用前景和背景颜色值(分别为顶部颜色和底部颜色),执行其计算并返回颜色值。最终的可见层是对混合层中的每个重叠像素执行混合模式计算的结果。

图片灰度上层为下图:

当然直接使用背景颜色为灰色也可以实现;使用这个图片效果会跟好看一点

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值