Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class window.Parallax
- constructor: (id, layers, params = (->)) ->
- @id = id
- @canvas = document.getElementById id
- @zindex = params['zindex'] || 0
- @ctx = @canvas.getContext '2d'
- @layers = []
- @offset = $('#' + @id).offset().left
- @delta = 600 - 478 # размер полного изображения - размер лайаута
- @sens = params.sensitivity || []
- imgready = 0; # количество загруженных изображений
- for i in layers
- img = new Image();
- img.src = i
- @layers.push img
- img.onload = =>
- imgready++;
- if imgready is layers.length then @render()
- createAvatar = (ava) =>
- img = new Image();
- img.src = ava
- img.onload = =>
- if imgready is layers.length then @render()
- img.onerror = =>
- img.src = "http://www.cheloveche.ru/images/missing/transparents/120.png"
- Notify.append I18n.notify.error.avatar, 'noaction'
- return img
- @avatar = false
- if params.avatar then @avatar = createAvatar(params.avatar)
- @checkParallax()
- updateLayers: (layers) ->
- @layers = []
- imgready = 0; # количество загруженных изображений
- for i in layers
- img = new Image();
- img.src = i
- @layers.push img
- img.onload = =>
- imgready++;
- if imgready is layers.length then @render()
- render: ->
- window.cnv = @canvas
- @canvas.width = @canvas.width;
- delta2 = -Math.round(@delta/2); # половина соотношения - центр
- draw = (x) =>
- nullShift = x-50; # нулевой сдвиг
- @canvas.width = @canvas.width;
- if @avatar && @zindex
- shift = @sens[1];
- avatar = delta2 + nullShift/shift
- @ctx.drawImage @avatar, Math.round(avatar) + 90, 30, 120, 120
- for i, j in @layers
- shift = @sens[j]||(@layers.length - j);
- layerX = delta2 + nullShift/shift
- @ctx.drawImage i, Math.round(layerX), 0, 600, 150
- if @avatar && !@zindex
- shift = @sens[j]||(@layers.length - 1);
- avatar = delta2 + nullShift/shift
- @ctx.drawImage @avatar, Math.round(avatar) + 90, 30, 120, 120
- draw(50);
- $('#' + @id).mousemove (event) =>
- left = Math.round((event.clientX - @offset) / 478 * 100)
- draw(left);
- checkParallax: ->
- @interval = setInterval =>
- if $('#' + @id).length is 0
- @destruct()
- , 1000
- destruct: ->
- p 'Canvas: Remove parallax object of #' + @id
- $('#' + @id).unbind 'mousemove'
- clearInterval @interval
- delete @
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement