Как реализовать прозрачность вокруг указателя?

148
29 января 2020, 09:40

Коллеги подскажите на JS(или на чистом css возможно) при помощи чего можно реализовать подобное решение https://www.kikk.be/2018/en/home Прозрачность области, при наведении мыши, определенного радиуса. Пройдите по ссылке поводите мышкой, чтоб понять о чем я. Благодарен заранее.

Answer 1

По вышеприведенной ссылке все нарисовано на канве. И это не прозрачность.

Нечто подобное можно сделать с svg + mask или clip-path

Верхнее изображение размыто блюром и из него вырезаны круги, а нижнее такое же как верхнее только без блюра и вырезанных кругов.

Таскайте мышкой за круги

let d = [[100,100,70], [300,100,60], [500,100,50]] 
         .map(d=>({x: d[0], y: d[1], r: d[2]})); 
let mask = circles('mask').call(upd); 
   
circles('g').style('fill','transparent') 
  .style('cursor','pointer') 
  .call(upd) 
  .call(d3.drag().on("drag", function (d) { 
    d3.select(this) 
      .attr("cx", d.x = d3.event.x) 
      .attr("cy", d.y = d3.event.y); 
    mask.call(upd)   
  })); 
 
function circles(selector) { 
  return d3.select(selector) 
           .selectAll('circle') 
           .data(d) 
           .enter() 
           .append('circle') 
} 
 
function upd(selection) { 
   selection.attr("cx", d => d.x) 
            .attr("cy", d => d.y) 
            .attr('r',  d => d.r); 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script> 
<svg viewBox="0 0 600 600"> 
<defs> 
  <filter id="blurfilter" width="110%" height="100%"> 
  	<feGaussianBlur stdDeviation="12" result="blur" /> 
  </filter> 
  <mask id="hole"> 
    <rect width="100%" height="100%" fill="#fff"/> 
  </mask> 
</defs> 
<image x="-50%" y="-50%" height="200%" width="200%" 
       xlink:href="https://i.imgur.com/cdqfoqZ.png"/> 
<image mask="url(#hole)" filter="url(#blurfilter)" 
       x="-50%" y="-50%" height="200%" width="200%" 
       xlink:href="https://i.imgur.com/cdqfoqZ.png" /> 
<g></g> 
</svg>

PS: если же хочется получить эффекты побогаче придется обратиться на темную сторону (WebGL)

READ ALSO
Проблема вывода в webpack

Проблема вывода в webpack

Сделал всё как в этой статье https://hackernooncom/how-to-build-a-react-project-from-scratch-using-webpack-4-and-babel-56d4a26afd32, но всегда по ходу выполнения всплывала вот эта ошибка:

153
Как сделать, чтобы webstorm смотрел на babel config?

Как сделать, чтобы webstorm смотрел на babel config?

Как сделать, чтобы webstorm смотрел на babel config? Нужно из babel вытянуть alias, чтобы при импорте файлов можно было через Ctrl переходить в файлБез использования...

147
Скачивание БД кликом по кнопке

Скачивание БД кликом по кнопке

Можно ли как-то сделать кнопку, нажатие которой приведет к экспорту определенной БД из phpmyadmin? Те у пользователя в личном кабинете будет обычная...

130
Плавная анимация передвижения одной окружности внутри другой

Плавная анимация передвижения одной окружности внутри другой

Даны 2 окружности, вложенные одна в другую: необходимо реализовать отталкивание внутренней от курсора при этом она не должна выходить за границы...

141