jQuery @ переменная? - PullRequest
       2

jQuery @ переменная?

2 голосов
/ 10 сентября 2011

У кого-то была проблема с кодом на другом сайте, и я заметил, что @ много использует в своем коде, и мне было просто интересно, что это такое и почему он его использует.

Вот его код:

# check if supports css3
supports = (->
  div = document.createElement("div")
  vendors = "Khtml Ms O Moz Webkit".split(" ")
  len = vendors.length
  (prop) ->
    return true  if prop of div.style
    prop = prop.replace(/^[a-z]/, (val) ->
      val.toUpperCase()
    )
    while len--
      return true  if vendors[len] + prop of div.style
    false
)()

class HandleCarousel
  constructor: (wrapper, block_number) ->
    @block_number = block_number
    @wrapper = wrapper

  wrapper = null
  counter: 0
  block_number: 0
  loopTimeout = 5000
  loopTimer = null

  handleBlur: =>
    helpers.windowState = 'blur'
    window.clearTimeout(@loopTimer)
    @counter = 0
    # reset all
    target = @wrapper.find('ul')
    target.css({left: 0})
    target.clearQueue()
    target.find('ul').stop()
  handleFocus: =>
    if helpers.windowState == 'blur'
      helpers.windowState = 'focus'
      @start(5000)

  handleWindowState: ->
    $(window).blur(@handleBlur)
    $(window).focus(@handleFocus)

  loop: ->
    @counter++
    slider = @wrapper.find('ul')
    block = @wrapper.find('ul li')
    delta = parseInt(block.css('width'), 10) * @counter * (-1)
    if (@counter < @block_number)  
      # check css3 support
      if slider.hasClass 'css3'
        slider.css({'left': delta})
      else
        slider.animate({'left': delta},{duration: 500, easing: 'easeInSine'})
    else
      @counter = 0
      @wrapper.find('ul').css({left: 0})

    if (@counter is 0 || @counter is @block_number-1)
      if @counter is 0
        slider.removeClass 'css3'
      @loopTimeout = 2500
      #/
    else
      slider.addClass 'css3'
      @loopTimeout = 5000

    @start(@loopTimeout) #if helpers.windowState isnt 'blur'

  # start loop slider
  start: (time) ->
    console.log 'start'
    @loopTimer = window.setTimeout( =>
      @loop()
    , time)



helpers = {
  windowState: 'focus'
  iDevice: /iphone|ipad/i.test(navigator.userAgent.toLowerCase())
  updateOrientation: ->
    location.reload()
  hasTouch : /android|iphone|ipad/i.test(navigator.userAgent.toLowerCase())
  supportsTouch: -> # "'createTouch' in document" will return true in Apple's Mobile Safari. Otherwise detect Android directly.
    android = navigator.userAgent.indexOf('Android') != -1
    return android || !!('createTouch' in document)

}# /helpers


jQuery ->
  window.console ?=
    log:-> #patch so console.log() never causes error even in IE.

  if $('.carousel').length>0
    target = $('.carousel')
    if supports('textShadow')
      target.find('ul').addClass 'css3'
    firstImg = target.find('ul li:first').html()
    console.log firstImg
    target.find('ul').append('<li>'+firstImg+'</li>')
    carousel_items = target.find('li').length
    if carousel_items > 2
      carousel = new HandleCarousel(target, carousel_items)
      carousel.handleWindowState()
      carousel.start(carousel.loopTimeout)

1 Ответ

8 голосов
/ 10 сентября 2011

Это не jQuery или JavaScript. Это CoffeeScript и в конечном итоге будет преобразовано в JavaScript.

@ используется для ссылки на свойства в текущем контексте (this). Так что CoffeeScript,

@something

эквивалентно JavaScript

this.something
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...