Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как заставить эту штуку работать в IE 10 и Опере

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
nkl
Отправлено: 07 Февраля, 2013 - 21:12:05
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




Здравствуйте, вот собсн такую херню ковыряю _http://www[dot]xiper[dot]net/collect/web-withou[dot][dot][dot]-background[dot]html
В хроме и мозиле работает на ура, а вот в Опере и осле не хочет. Я уже и ЦССник модифицировал, вот мой вариант:
CODE (html):
скопировать код в буфер обмена
  1. #sky {
  2.         height: 184px;
  3.         width: 1000px;
  4.         margin: 0 auto;
  5.         position: relative;
  6.         -moz-perspective: 1000px;                               // глубина сцены
  7.         -webkit-perspective: 1000px;
  8.         -o-perspective: 1000px;
  9.         -ms-perspective: 1000px;
  10.         perspective: 1000px;
  11.         overflow: hidden;
  12.         background-image:-moz-linear-gradient(top, #072ac0, #4466f9);
  13.         background-image:-webkit-linear-gradient(top, #072ac0, #4466f9);
  14.         background-image:-o-linear-gradient(top, #072ac0, #4466f9);
  15.         background-image:-ms-linear-gradient(top, #072ac0, #4466f9);
  16.         backround-image: linear-gradient(top, #072ac0, #4466f9);
  17. }
  18. #world {
  19.         -webkit-transform-style: preserve-3d;
  20.         -moz-transform-style: preserve-3d;
  21.         -o-transform-style: preserve-3d;
  22.         -ms-transform-style: preserve-3d;
  23.         transform-style: preserve-3d;                           // объекты поддаются 3d траснформациям
  24.         position: relative;
  25.         height: 1000px;
  26. }
  27. #world>div {
  28.         -webkit-transform-style: preserve-3d;
  29.         -moz-transform-style: preserve-3d;
  30.         -o-transform-style: preserve-3d;
  31.         -ms-transform-style: preserve-3d;
  32.         transform-style: preserve-3d;                          
  33. }
  34. .cloud {
  35.         position: absolute;
  36. }
  37. .cloudLayer {
  38.         position: absolute;
  39.         left: 50%;
  40.         top: 50%;
  41.         width: 109px;           /* размеры не обязательно подстраивать под размеры текстуры */
  42.         height: 120px;
  43.         margin-left: -178px;
  44.         margin-top: -178px;
  45.         -webkit-transition: opacity .5s ease-out;
  46.         -moz-transition: opacity .5s ease-out;
  47.         -o-transition: opacity .5s ease-out;
  48.         -ms-transition: opacity .5s ease-out;
  49.         transition: opacity .5s ease-out;
  50. }

И сам скрипт:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. (function() {
  3.                 var lastTime = 0;
  4.                 var vendors = ['ms', 'moz', 'webkit', 'o'];
  5.                 for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
  6.                         window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
  7.                         window.cancelRequestAnimationFrame = window[vendors[x]+
  8.                           'CancelRequestAnimationFrame'];
  9.                 }
  10.  
  11.                 if (!window.requestAnimationFrame)
  12.                         window.requestAnimationFrame = function(callback, element) {
  13.                                 var currTime = new Date().getTime();
  14.                                 var timeToCall = Math.max(0, 16 - (currTime - lastTime));
  15.                                 var id = window.setTimeout(function() { callback(currTime + timeToCall); },
  16.                                   timeToCall);
  17.                                 lastTime = currTime + timeToCall;
  18.                                 return id;
  19.                         };
  20.  
  21.                 if (!window.cancelAnimationFrame)
  22.                         window.cancelAnimationFrame = function(id) {
  23.                                 clearTimeout(id);
  24.                         };
  25.         }())
  26.  
  27.  
  28.         var world = document.getElementById('world'),           // сцена
  29.                 arrClouds = [],
  30.                 arrCloudLayers = [],
  31.                 skyWidth = world.offsetWidth,
  32.                 skyHeight = world.offsetHeight;
  33.        
  34.        
  35. function init(){
  36.        
  37.         /* к-во облаков и их расположение подбираем в зависимости от сцены */
  38.         arrClouds.push( createCloud({
  39.                 posX: -200,
  40.                 posY: 0,
  41.                 posZ: 0,
  42.                 speed: .2,
  43.                 layersN: 10,
  44.                 texture: '{THEME}/img/cloud-3.png',
  45.                 textureSizeX: 256,
  46.                 textureSizeY: 256
  47.                 })
  48.                         );
  49.                        
  50.         arrClouds.push( createCloud({
  51.                 posX: 600,
  52.                 posY: 100,
  53.                 posZ: 0,
  54.                 speed: .2,
  55.                 layersN: 10,
  56.                 texture: '{THEME}/img/cloud-3.png',
  57.                 textureSizeX: 256,
  58.                 textureSizeY: 256
  59.                 })
  60.                         );
  61.                        
  62.         arrClouds.push( createCloud({
  63.                 posX: 1500,
  64.                 posY: -200,
  65.                 posZ: 0,
  66.                 speed: .2,
  67.                 layersN: 10,
  68.                 texture: '{THEME}/img/cloud-3.png',
  69.                 textureSizeX: 256,
  70.                 textureSizeY: 256
  71.                 })
  72.                         );
  73.                        
  74.         arrClouds.push( createCloud({
  75.                 posX: 1000,
  76.                 posY: -200,
  77.                 posZ: 0,
  78.                 speed: .2,
  79.                 layersN: 10,
  80.                 texture: '{THEME}/img/cloud-3.png',
  81.                 textureSizeX: 256,
  82.                 textureSizeY: 256
  83.                 })
  84.                         );
  85.                        
  86.         animate(); // запускаем анимацию
  87.        
  88. }
  89.  
  90. /*
  91.         создание облака
  92.         posX, posY, posZ        - координаты положения центра облака
  93.         speed                           - скорость перемещения px/sec
  94.         layersN                         - к-во слоев в облаке
  95.         texture                         - путь к текстуре
  96.         textureSizeX/Y          - размеры текстуры     
  97. */
  98. function createCloud(params)
  99. {
  100.          var cloud = document.createElement( 'div');
  101.          
  102.          cloud.className = 'cloud';
  103.          
  104.         /* сохраняем позицию облака     */
  105.         cloud.data = {
  106.                 posX: params.posX,
  107.                 posY: params.posY,
  108.                 posZ: params.posZ,
  109.                 speed: params.speed
  110.         }
  111.        
  112.         world.appendChild( cloud );
  113.        
  114.         var cloudT = 'translateX( ' + cloud.data.posX + 'px ) translateY( ' + cloud.data.posY + 'px ) translateZ( ' + cloud.data.posZ + 'px )';
  115.         cloud.style.webkitTransform = cloudT;
  116.         cloud.style.MozTransform = cloudT;
  117.         cloud.style.oTransform = cloudT;
  118.         cloud.style.msTransform = cloudT;
  119.        
  120.         /* формируем слои облака */
  121.         for( var i = 0; i < params.layersN; i++ ) {
  122.                
  123.                 cloudLayer = document.createElement( 'img' );
  124.                        
  125.                 cloudLayer.setAttribute( 'src', params.texture );
  126.                 cloudLayer.className = 'cloudLayer';
  127.                
  128.                 cloudLayer.data = {
  129.                         cloudLayerX: params.textureSizeX - ( Math.random() * params.textureSizeX ),                     // координата X (кучность облака по оси X. чем больше значение, тем кунчость меньше)
  130.                         cloudLayerY: params.textureSizeY - ( Math.random() * params.textureSizeY * 2 ),         // координата Y (кучность по Y)
  131.                         cloudLayerZ: 100 - ( Math.random() * 200 ),                                                                                     // координата Z
  132.                         cloudLayerA: Math.random() * 360,                                                                                                       // начальный угол повоторота
  133.                         cloudLayerAV: ( Math.random() > 0.5 ) ? -0.1*params.speed: 0.1*params.speed,    // направление и скорость вращения
  134.                         cloudLayerS: .9 + Math.random()                                                                                                         // масштаб
  135.                 }
  136.                
  137.                 var t = 'translateX( ' + cloudLayer.data.cloudLayerX + 'px ) translateY( ' + cloudLayer.data.cloudLayerY + 'px ) translateZ( ' + cloudLayer.data.cloudLayerZ + 'px ) rotateZ( ' + cloudLayer.data.cloudLayerA + 'deg ) scale( ' + cloudLayer.data.cloudLayerS + ' )';
  138.                 cloudLayer.style.webkitTransform = t;
  139.                 cloudLayer.style.MozTransform = t;
  140.                 cloudLayer.style.oTransform = t;
  141.                 cloudLayer.style.msTransform = t;
  142.                
  143.                 cloud.appendChild( cloudLayer );
  144.                 arrCloudLayers.push( cloudLayer );
  145.                
  146.         }
  147.        
  148.         return cloud;
  149.  
  150. }
  151.  
  152. function animate() {
  153.         requestAnimationFrame( animate );
  154.        
  155.         // перемещение облака
  156.         for (  var j = arrClouds.length; j--;)
  157.         {
  158.                 var cloud = arrClouds[j];
  159.                        
  160.                 if( cloud.data.posX > skyWidth+300 ) cloud.data.posX = -300;
  161.                
  162.                 cloud.data.posX += cloud.data.speed;
  163.  
  164.                 var cloudT = 'translateX('+ cloud.data.posX +'px )';
  165.                 cloud.style.webkitTransform = cloudT;
  166.                 cloud.style.MozTransform = cloudT;
  167.                 cloud.style.oTransform = cloudT;
  168.                 cloud.style.msTransform = cloudT;
  169.         }
  170.        
  171.         // обработка слоев облака
  172.         for( var j = arrCloudLayers.length; j--; ) {
  173.                 var layer = arrCloudLayers[ j ];
  174.  
  175.                 layer.data.cloudLayerA += layer.data.cloudLayerAV; // Z- поворот
  176.                        
  177.                 var t = 'translateX( ' + layer.data.cloudLayerX + 'px ) translateY( ' + layer.data.cloudLayerY + 'px ) translateZ( ' + layer.data.cloudLayerZ + 'px ) rotateZ( ' + layer.data.cloudLayerA + 'deg )';
  178.                 layer.style.webkitTransform = t;
  179.                 layer.style.MozTransform = t;
  180.                 layer.style.oTransform = t;
  181.                 layer.style.msTransform = t;
  182.                        
  183.                 }
  184.        
  185. }
  186.  
  187. init();
  188.  

Суть моей модификации заключается в том, что в те места, где есть код типа:
CODE (javascript):
скопировать код в буфер обмена
  1. layer.style.webkitTransform = t;
  2. layer.style.MozTransform = t;

Я просто добавил:
CODE (javascript):
скопировать код в буфер обмена
  1. layer.style.oTransform = t;
  2. layer.style.msTransform = t;

Ну и в ЦССнике так же в принципе. Но вот не хочет работать и все тут. Подозреваю, что накосячил в самом скрипте, но т.к. совершенно не компитентен в JS, не могу разобраться в чем причина. Люди добрые, помогите пожалуйста! Улыбка
 
 Top
DelphinPRO
Отправлено: 07 Февраля, 2013 - 21:26:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




не могу вкурить связи сего кода с указанной ссылкой.
чего вам надо-то?
(Добавление)
но в принципе могу включить телепатор и предположить, что в опере и осле не работают 3D функции

(Отредактировано автором: 07 Февраля, 2013 - 21:26:23)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
IllusionMH
Отправлено: 08 Февраля, 2013 - 00:02:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




nkl, в опере нет CSS 3D transforms. В ие - хз, но вроде тоже нет

_http://caniuse.com/#feat=transforms3d

(Отредактировано автором: 08 Февраля, 2013 - 00:09:54)

 
 Top
nkl
Отправлено: 08 Февраля, 2013 - 03:38:34
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




Телепатор включать не нужно, нужно тему читать внимательно. А главное название топика. Код приведенный в ссылке отличается от моего только тем, что в CSS свойствах я всюду добавил по две строчки в тех местах, где есть:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. -moz-perspective: 1000px;                               // глубина сцены
  3. -webkit-perspective: 1000px;
  4.  

Я добавил:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. -o-perspective: 1000px;                               // глубина сцены
  3. -ms-perspective: 1000px;
  4.  

Ну и в javascript тоже самое. Это дело работает в Google Chrome, Mozzila Firefox и теперь IE10 (в 9 не работает). Но, в Опере не работает.
Цитата:
nkl, в опере нет CSS 3D transforms. В ие - хз, но вроде тоже нет

Как же это так в десятом осле есть, а в Опере нет. Это не так давно мой любимый браузер был!
 
 Top
IllusionMH
Отправлено: 08 Февраля, 2013 - 04:35:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




nkl, ИЕ10 по поддержке и некоторым параметрам еще в превьюхе натягивал остальные браузеры, вот только пилили долго и в в7 нескоро запилили, остальные успели подтянуться.
В Опере зато есть много того, чего нет в других браузерах, но вот 3d transform нет. Эта спека находится еще в черновике(CSS Transforms W3C Working Draft 11 September 2012) и будет меняться не раз. Использование именно 3д крайне мало, и в большинстве случаев это какие-либо демки этих возможностей.
Как вариант - считать ручками изменение масштаба и использовать z-index, sacale, translate. Должно хватить(если я понял что нет поворотов относительно осей X и Y)

Такова цена использования фишек из черновиков спецификаций, при том, что на арене присутствует не один движок.
 
 Top
DelphinPRO
Отправлено: 08 Февраля, 2013 - 08:40:28
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




nkl пишет:
Телепатор включать не нужно, нужно тему читать внимательно. А главное название топика. Код приведенный в ссылке отличается от моего только тем, что в CSS свойствах я всюду добавил по две строчки в тех местах

Уважаемый nkl, вы дали не ту ссылку Улыбка
Но я все-таки нашел источник вашего вдохновения и не могу понять одного. Там внизу русским языком написано в каких браузерах будет работать данный пример. И оперы в этом списке нет. А если нет — значит нет поддержки. Авторы этого сайта всегда тестируют публикуемые примеры.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
nkl
Отправлено: 08 Февраля, 2013 - 11:25:12
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




DelphinPRO, прошу прощения за кривую ссылку. В принципе все понятно. Тут как раз есть повороты по оси X и Y, это ж 3D облака, весьма симпатично и реалистично смотрится. Как же ш не используется 3D? Была бы возможность, уже кругом применяли бы. В общем возможность кульная, работает везде кроме Оперы. Сам проверил, мою демку можно посмотреть здесь _dle.nkl.su. Правда там еще с картинкой стеллы дизайнер поработает и с логотипом. Заказчик пищит от восторга! Мы сказали ему что опера через пол годика ну может год станет поддерживать такую тему, а пока заглушку сделаем в качестве статических облаков.
 
 Top
DelphinPRO
Отправлено: 08 Февраля, 2013 - 11:57:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




nkl, да, прикольно смотрится.
А вам не кажется, что лучше будет расширить голубой фон шапки на всю ширину страницы? А так какая-то ограниченность ощущается.
Просто попробуйте убрать ширину у #sky, будет намного лучше, ИМХО.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
nkl
Отправлено: 08 Февраля, 2013 - 16:41:27
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




Заказчик не одобрил, я сначала на всю ширину делал. Вот кстати еще один прикольный пример использования 3d трансформации с трапецеидальным искажением размеров дива _http://desandro.github.com/3dtransforms/examples/cube-02-show-sides.html
Смотреть в хроме.
 
 Top
IllusionMH
Отправлено: 08 Февраля, 2013 - 17:56:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




nkl пишет:
. Как же ш не используется 3D? Была бы возможность, уже кругом применяли бы.

Напомнило жалобы пользователей оперы на ее форуме, что после обновления, на почти всех посещаемых форумах каким-то странным образом скруглялись почти все углы и стало ужасно.
Всего хорошо в меру, и Метро стайл показал всем гламурным огрызкам, что удобное представление контента выглядит эффектнее ползунков, на которых блик зависит от положения источника света Радость

Посмотрел шапку в примере выглядит красино, но простите - это не то, ради чего стоит требовать поддержки 3D Transforms. Понимаю если б это все было запилено в CSS анимацию - нивапрос, но если это реализовано в JS то добавить scale и скорость в зависимости от "глубины" - вообще никаких проблем.
nkl пишет:
Тут как раз есть повороты по оси X и Y, это ж 3D облака, весьма симпатично и реалистично смотрится.rotateX

Нет. Есть поворот относительно оси Z (rotateZ, котрый отлично поддерживается Оперой) и нет rotateX rotateY.
Таким образом несколько разных z-index или opacity, чутка разный зум и скорость перемещения, и результат будет тем же.

(Отредактировано автором: 08 Февраля, 2013 - 17:57:57)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB