<div id="ap"></div>
#ap, #app {background: 
repeating-linear-gradient(45deg, #666, #222, #666, #ea8, #666, #222, #666, #8ce, #666 2%) fixed; }

var draw = SVG('ap').size(300, 220).style('border: 1px solid #0006;')
var rad = draw.gradient
('radial', function(stop)
 {stop.at(0, '#ddd', 1), stop.at(1, '#444', 1) })
var mask = draw.mask()
var лист = draw.rect(280, 200).move(10, 10).radius(20).fill('#0cc')
mask.add(лист.clone().move(10, 10).fill('#fff'))
лист.maskWith(mask) //circle.maskWith(mask)
var круг = draw.circle(40).center(50, 50)
mask.add(круг.clone().center(50, 100)), mask.add(круг.clone().center(50, 50))
mask.add(круг.clone().center(100, 100)), mask.add(круг.clone().center(100, 50))
mask.add(круг.clone().center(150, 100)), mask.add(круг.clone().center(150, 50))
mask.add(круг.clone().center(200, 100)), mask.add(круг.clone().center(200, 50))
mask.add(круг.clone().center(250, 100)), mask.add(круг.clone().center(250, 50))
var шар  = draw.use(круг).fill(rad) 
шар.clone().center(0, 0)
шар.clone().center(50, 0)
шар.clone().center(100, 0)
шар.clone().center(150, 0)
шар.clone().center(200, 0)

var стик = draw.rect(240,40).center(150, 150).radius(20) 
стик.style('cursor:pointer; fill:#ff0; stroke:#000; stroke-width: 10px') 
mask.add(стик.clone().fill('#000')), стик.maskWith(mask)

var тост = draw.text('').font({ fill: '#800', size: 24 })
тост.style('cursor:help; font-weight: 800; fill:#800; stroke:#ccc; stroke-width: .4px')
mask.add(тост.clone().center(150, 180).fill('#000')) //,тост.maskWith(mask)
// тост.text('').center(0, 0)
var butt = draw.rect(260,76).center(150, 163).radius(20) 
butt.style('cursor:pointer; fill:#0ff2; stroke:#0006; stroke-width: 2px')
mask.add(butt.clone().fill('#000')) //,butt.maskWith(mask)
тост.text('Мышкуем здесь').center(150, 150)
лист.on('mouseover', 
function(){this.animate(200, '<>', 20).fill('#c8c'), тост.text('Заходи ежли чё').center(150, 150) }) 
лист.on('mouseout', 
function(){this.animate(200, '<>', 20).fill('#ccc'), тост.text('— Спасибо! —').center(150, 150) })
//var цикл = function(){ } 
butt.on('mouseover', 
 function(){
  круг.animate(200, '<>', 20).center(50, 20)
      .animate(200, '<>', 20).center(50, 120)
      .animate(200, '<>', 20).center(50, 50)
      .animate(200, '<>', 20).center(50, 120)
      .animate(200, '<>', 20).center(50, 80)
      .animate(200, '<>', 20).center(50, 120)
      .animate(200, '<>').center(50, 100) 
  тост.text('— Ща спою —').center(150, 150)  })
butt.on('mouseout', 
function(){
  стик.animate(1000, '<>', 20).reverse(true).center(150, 50).reverse()
      .animate(1000, '<>', 20).reverse(true).center(150, 150).reverse()
  круг.animate(1000, '<>', 10).center(50, 50) //.reverse(false)
  тост.animate(1000, '<>', 20).reverse(true).center(150, 50).reverse()
      .delay(1000).animate(1000, '<>', 20).reverse(true).center(150, 150).reverse() 
  butt.delay(1000).animate(1000, '<>', 20).reverse(true).center(150, 50).reverse()
      .animate(1000, '<>', 20).reverse(true).center(150, 163).reverse()
})//.loop(1) .delay(500)//.loop(1, true)
                  

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/svg.js/2.7.1/svg.min.js