2013-06-02 4 views
4

Я новичок в Javascript и JQuery и нахожу скрипт, который меняет значения CSS 'transform', когда мышь перемещается в окне браузера, чтобы сделать перспективу изменения изображения.Javascript/jquery for array array

Все работает отлично! Я просто хочу оптимизировать javascript/jquery, чтобы уменьшить количество кода (поскольку я настроен на CSS -webkit- -moz- -ms- и т. Д.), А также упростить настройку скрипта.

Ok так вот часть, я хочу, чтобы оптимизировать:

$('#logo').css({ 

'-webkit-transform': 
"rotateY(" 
+ (e.pageX-(current_width/2))/150 + 
"deg) rotateX(" 
+ (e.pageY-(e.pageY*2-600)-(current_height/2))/300 + 
"deg)", 

    '-moz-transform': 
"rotateY(" 
+ (e.pageX-(current_width/2))/150 + 
"deg) rotateX(" 
+ (e.pageY-(e.pageY*2-600)-(current_height/2))/300 + 
"deg)", 

    '-ms-transform': 
"rotateY(" 
+ (e.pageX-(current_width/2))/150 + 
"deg) rotateX(" 
+ (e.pageY-(e.pageY*2-600)-(current_height/2))/300 + 
"deg)", 

    'transform': 
"rotateY(" 
+ (e.pageX-(current_width/2))/150 + 
"deg) rotateX(" 
+ (e.pageY-(e.pageY*2-600)-(current_height/2))/300 + 
"deg)", 

    }); 

Как вы можете видеть только изменение в каждом из 4-х центральных секций в CSS браузера отдельные элементы (-webkit-, -moz- , и т. д.), поэтому, естественно, я хочу создать массив, который будет содержать каждый из этих вариантов, а затем перебирать варианты.

Это моя первая попытка с помощью JavaScript «для» в цикле:

var browserTransitionCSS = [ 
    '-webkit-transition', 
    '-moz-transition', 
    '-ms-transition', 
    'transition' 
    ]; 


    for(var i=0; i < browserTransformCSS.length; i++) 
      { 
$('#logo').css({ 
browserTransformCSS: 
    "rotateY(" 
    + (e.pageX-(current_width/2))/150 + 
    "deg) rotateX(" 
     + (e.pageY-(e.pageY*2-600)-(current_height/2))/200 + 
    "deg)", 
    }); 
}; 

Это моя вторая попытка с помощью Jquery «каждый» в цикле:

var browserTransitionCSS = [ 
    '-webkit-transition', 
    '-moz-transition', 
    '-ms-transition', 
    'transition' 
    ]; 


$.each(browserTransitionCSS, function(something) { 
$('#logo').css({ 
something : 
"rotateY(" 
+ (e.pageX-(current_width/2))/150 + 
"deg) rotateX(" 
+ (e.pageY-(e.pageY*2-600)-(current_height/2))/200 
+ "deg)", 
       }); 
      }); 

И теперь, после нескольких часов боюсь, я ухожу и спрашиваю, может ли кто-нибудь помочь мне.

Если было бы полезно, чтобы увидеть мой адрес, то, пожалуйста, спрашивайте.

Любая помощь здесь была бы очень признательна. Большое спасибо.

+0

Хорошо, я все еще не совсем там, поэтому закодировал рабочий пример: http://jsfiddle.net/asy9u/5/. Любая помощь будет принята с благодарностью. –

ответ

3

Я думаю, я хотел бы сделать что-то вроде этого:

$(window).on('mousemove', function(e) { 
    var current_width = $(window).width(), 
     current_height = $(window).height(), 
     y = (e.pageX - (current_width/2))/150, 
     x = (e.pageY - (e.pageY * 2 - 600) - (current_height/2))/300; 

    $('#logo').css(transformObj(x,y)); 
}); 

function transformObj(x,y) { 
    var pfx = ['-webkit-transform','-moz-transform','-ms-transform','transform'], 
     obj = {}; 

    $.each(pfx, function(k,val) { 
     obj[val] = "rotateY("+y+"deg) rotateX("+x+"deg)"; 
    }); 
    return obj; 
} 

FIDDLE

Создание объекта передается css() метод JQuery в отдельной функции, где вы перебирать префиксы браузера и применять X и Y вращение к каждому, затем передача его обратно в css().

+0

Благодарим вас за ответ.Я не включил весь мой код в свой первый экстракт, и это, возможно, вызвало путаницу. Мой код отлично работает для того, что мне нужно, но я просто хочу знать, как я могу сократить код. Вместо: '-webkit-transform': ВСЕ КОД, '-moz-transform': ВСЕ КОД И т.д. Я просто хочу поставить: Array = '-webkit-transform', '-moz-transform' и т. Д. Теперь обведите вокруг этого: Array: ALL THE CODE –

+0

@MichaelWalkling - я добавил mousemove для демонстрационных целей, но приведенный выше код должен показать вам довольно хороший пример того, как перебирать свойства префикса префикса браузера и применять значение к объекту и как передать его '.css (object) и т. д. – adeneo

+0

Еще раз спасибо, но я все еще не совсем понял это. Я закодировал рабочий пример: http://jsfiddle.net/asy9u/5/. Любая помощь будет принята с благодарностью. –

0

Первый аргумент, который вы получите в функции, которую вы передаете каждому, будет индексом элемента (если объект, который вы просматриваете, является массивом) или ключ (если это ассоциативный массив).

Try:

$.each(browserTransitionCSS, function(i, element) { 
    ... and so on 

Внутри функции вы бы получать каждый переходный элемент: "-webkit-переход", "-moz-перехода" в качестве аргумента element. Успехов

+0

Благодарим вас за ответ. Я пробовал это: $ .each (browserTransitionCSS, function (i, element) { $ ('# logo'). Css ({ что-то: "rotateY (" и т. Д. Но это не работает –

+0

http://jsfiddle.net/asy9u/5/ –

0

Как использовать: для петли до 360 ангелов, ниже одна линия, она должна вращаться для 24 линий с одинаковым расстоянием.

#straight{ 
height: 30px; 
border-right: 1px solid blue; 
-webkit-transform: rotate(45 deg); 
transform: rotate(45 deg); 
position: absolute; 
}