Advertisement
Serafim

Untitled

Oct 30th, 2013
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class window.Parallax
  2.   constructor: (id, layers, params = (->)) ->
  3.     @id     = id
  4.     @canvas = document.getElementById id
  5.     @zindex = params['zindex'] || 0
  6.     @ctx    = @canvas.getContext '2d'
  7.     @layers = []
  8.     @offset = $('#' + @id).offset().left
  9.     @delta  = 600 - 478 # размер полного изображения - размер лайаута
  10.     @sens = params.sensitivity || []
  11.  
  12.  
  13.     imgready = 0; # количество загруженных изображений
  14.     for i in layers
  15.       img = new Image();
  16.       img.src = i
  17.       @layers.push img
  18.       img.onload = =>
  19.         imgready++;
  20.         if imgready is layers.length then @render()
  21.  
  22.     createAvatar = (ava) =>
  23.       img = new Image();
  24.       img.src = ava
  25.       img.onload = =>
  26.         if imgready is layers.length then @render()
  27.       img.onerror = =>
  28.         img.src = "http://www.cheloveche.ru/images/missing/transparents/120.png"
  29.         Notify.append I18n.notify.error.avatar, 'noaction'
  30.       return img
  31.     @avatar = false
  32.     if params.avatar then @avatar = createAvatar(params.avatar)
  33.  
  34.     @checkParallax()
  35.  
  36.   updateLayers: (layers) ->
  37.     @layers = []
  38.     imgready = 0; # количество загруженных изображений
  39.     for i in layers
  40.       img = new Image();
  41.       img.src = i
  42.       @layers.push img
  43.       img.onload = =>
  44.         imgready++;
  45.         if imgready is layers.length then @render()
  46.  
  47.  
  48.   render: ->
  49.     window.cnv = @canvas
  50.     @canvas.width = @canvas.width;
  51.     delta2 = -Math.round(@delta/2); # половина соотношения - центр
  52.     draw = (x) =>
  53.       nullShift = x-50; # нулевой сдвиг
  54.       @canvas.width = @canvas.width;
  55.  
  56.       if @avatar && @zindex
  57.         shift = @sens[1];
  58.         avatar = delta2 + nullShift/shift
  59.         @ctx.drawImage @avatar, Math.round(avatar) + 90, 30, 120, 120
  60.  
  61.       for i, j in @layers
  62.         shift = @sens[j]||(@layers.length - j);
  63.         layerX = delta2 + nullShift/shift
  64.         @ctx.drawImage i, Math.round(layerX), 0, 600, 150
  65.  
  66.       if @avatar && !@zindex
  67.         shift = @sens[j]||(@layers.length - 1);
  68.         avatar = delta2 + nullShift/shift
  69.         @ctx.drawImage @avatar, Math.round(avatar) + 90, 30, 120, 120
  70.  
  71.     draw(50);
  72.     $('#' + @id).mousemove (event) =>
  73.       left = Math.round((event.clientX - @offset) / 478 * 100)
  74.       draw(left);
  75.  
  76.   checkParallax: ->
  77.     @interval = setInterval =>
  78.       if $('#' + @id).length is 0
  79.         @destruct()
  80.     , 1000
  81.  
  82.   destruct: ->
  83.     p 'Canvas: Remove parallax object of #' + @id
  84.     $('#' + @id).unbind 'mousemove'
  85.     clearInterval @interval
  86.     delete @
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement