Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript][CSS] Płynność animacji w różnych przeglądarkach
kamilo818
post
Post #1





Grupa: Zarejestrowani
Postów: 250
Pomógł: 11
Dołączył: 20.01.2014

Ostrzeżenie: (0%)
-----


Witam,
zmagam się z pewnym problemem.
Jestem w trakcie pisania strony : http://page4u.waw.pl/ania5/ i wszystkie aniamcje podczas scrolowania strony działają poprawnie. Dokładnie chodzi mi płynność przscrollowania strony (przechodzenie między slajdami).

Pod Firefoxem wszystko działa idealnie, niestety pod Google Chrome i IE 11 działa strasznie - brak płynności.

Ponież kod aniamacji :

  1. var $document = $(document);
  2. $document.ready(function(){
  3. //////////////////////////////////////////////**
  4. var winWidth, winHeight;
  5. var $body = $('body'),
  6. $circle = $('.circle');
  7. var R = $circle.width() / 2;
  8. var C = Math.PI * R * 2;
  9.  
  10. $(window).on('resize', function(){
  11.  
  12. winWidth = $(this).width();
  13. winHeight = $(this).height();
  14. $body.css('height', C + winHeight);
  15.  
  16. }).trigger('resize');
  17.  
  18. var scrolled = false;
  19.  
  20.  
  21. $document.on('scroll', function(){
  22.  
  23. var top = $document.scrollTop();
  24.  
  25. if(top > C - 1){
  26. $document.scrollTop(1);
  27. } else if (top == 0 && scrolled) {
  28. $document.scrollTop(C - 1);
  29. }
  30.  
  31. scrolled = true;
  32.  
  33. var d = ((top / C) * Math.PI * 2) - (Math.PI);
  34.  
  35. var x = Math.cos(d) * R;
  36. var y = Math.sin(d) * R;
  37.  
  38. $circle.css({
  39. top: -(R-y) + winHeight/2,
  40. left: -(R-x) + winWidth/2
  41. });
  42.  
  43. ////////ułożenie orbit
  44. $('div#orbita').each(function(){
  45. $(this).css({
  46. top: (-(R-y) + winHeight/2)+(($circle.height()-$(this).height())/2),
  47. left: (-(R-x) + winWidth/2)+(($circle.width()-$(this).width())/2)
  48. });
  49. });
  50.  
  51. }).trigger('scroll');
  52.  
  53. /////////////pozycja slajdów
  54.  
  55. var $things = $circle.children('div:not(.planet)').css('position', 'absolute');
  56. var i;
  57. $things.each(function(i){
  58.  
  59. var $this = $(this);
  60.  
  61. var a = (Math.PI * 2 / $things.length) * i;
  62.  
  63. var x = Math.cos(a) * R;
  64. var y = Math.sin(a) * R;
  65.  
  66. $this.css({
  67. top: y + R - ($this.height() / 2)-20,
  68. left: x + R - ($this.width() / 2)-20-(winWidth*0.05)
  69. });
  70.  
  71. });
  72.  
  73. ///////////////// pozycje planet
  74.  
  75. function setPos(pozycja, pozycja2, RR, $this){
  76.  
  77. var a = (Math.PI * 2 / pozycja) * pozycja2;
  78. var x = Math.cos(a) * RR;
  79. var y = Math.sin(a) * RR;
  80.  
  81. $this.css({
  82. top: y + RR - ($this.height() / 2),
  83. left: x + RR - ($this.width() / 2)
  84. });
  85.  
  86. setInterval(function(){
  87. if(pozycja2==pozycja){
  88. pozycja2=0;
  89. }
  90. a = (Math.PI * 2 / pozycja) * pozycja2++;
  91. x = Math.cos(a) * RR;
  92. y = Math.sin(a) * RR;
  93.  
  94. $this.css({
  95. top: y + RR - ($this.height() / 2),
  96. left: x + RR - ($this.width() / 2)
  97. });
  98.  
  99. }, Math.floor((Math.random() * 10) + 1));
  100.  
  101. }
  102.  
  103. var poz = 5000;
  104.  
  105.  
  106. var $thing = $('.b').children().css('position', 'absolute');
  107. $thing.each(function(){
  108. setPos(poz,Math.floor((Math.random() * poz) + 0), ($('.b').width()/2), $thing);
  109. });
  110.  
  111. var $thing = $('.c').children().css('position', 'absolute');
  112. $thing.each(function(){
  113. setPos(poz,Math.floor((Math.random() * poz) + 0), ($('.c').width()/2), $thing);
  114. });
  115.  
  116. var $thing = $('.circle').children('.planet').css('position', 'absolute');
  117. $thing.each(function(){
  118. setPos(poz,Math.floor((Math.random() * poz) + 0), ($('.circle').width()/2), $thing);
  119. });
  120.  
  121. var $thing = $('.d').children().css('position', 'absolute');
  122. $thing.each(function(){
  123. setPos(poz,Math.floor((Math.random() * poz) + 0), ($('.d').width()/2), $thing);
  124. });
  125.  
  126. var $thing = $('.e').children().css('position', 'absolute');
  127. $thing.each(function(){
  128. setPos(poz,Math.floor((Math.random() * poz) + 0), ($('.e').width()/2), $thing);
  129. });
  130.  
  131. var $thing = $('.f').children().css('position', 'absolute');
  132. $thing.each(function(){
  133. setPos(poz,Math.floor((Math.random() * poz) + 0), ($('.f').width()/2), $thing);
  134. });
  135.  
  136. var $thing = $('.g').children().css('position', 'absolute');
  137. $thing.each(function(){
  138. setPos(poz,Math.floor((Math.random() * poz) + 0), ($('.g').width()/2), $thing);
  139. });
  140.  
  141. var $thing = $('.h').children().css('position', 'absolute');
  142. $thing.each(function(){
  143. setPos(poz,Math.floor((Math.random() * poz) + 0), ($('.h').width()/2), $thing);
  144. });
  145.  
  146. /////////////////
  147.  
  148. $(window).bind('resize', function(e){
  149. window.resizeEvt;
  150. $(window).resize(function()
  151. {
  152. clearTimeout(window.resizeEvt);
  153. window.resizeEvt = setTimeout(function()
  154. {
  155.  
  156. location.reload();
  157.  
  158. }, 250);
  159. });
  160. });
  161. //////////////////////////////////////////////**
  162. ///////////// obsluga menu
  163. $('.menu #menu span:first-child').css({
  164. 'font-size':'16px',
  165. 'font-weight':'bold'
  166. });
  167.  
  168. $('.menu #menu span').click(function(){
  169. if(open_menu){
  170. $(".menu").css({'right': "-170px"});
  171. open_menu=false;
  172. }
  173. $('.menu #menu span').css({
  174. 'font-size':'',
  175. 'font-weight':''
  176. });
  177. $(this).css({
  178. 'font-size':'16px',
  179. 'font-weight':'bold'
  180. });
  181. var id = $(this).attr('pos');
  182. $('html, body').stop().animate({
  183. scrollTop: id
  184. }, 1000);
  185. });
  186.  
  187. var start = [];
  188. var end =[];
  189. var arrow_pos=0;
  190. $('div.menu #menu span').each(function(i){
  191.  
  192. start[i] = $(this).attr('pos');
  193. end[i] = $(this).next('span').attr('pos');
  194. if(!end[i]){
  195. end[i] = $('body').height();
  196. }
  197.  
  198. $document.on('scroll', function(){
  199.  
  200. if($(this).scrollTop()>=start[i] && $(this).scrollTop()<end[i]){
  201. $('.menu #menu span:nth-child('+(i+1)+')').css({
  202. 'font-size':'16px',
  203. 'font-weight':'bold'
  204. });
  205. arrow_pos=i;
  206. }else{
  207. $('.menu #menu span:nth-child('+(i+1)+')').css({
  208. 'font-size':'',
  209. 'font-weight':''
  210. });
  211. }
  212. });
  213.  
  214. });
  215.  
  216. var open_menu=false;
  217. $('.menu .mobile_menu').click(function () {
  218. if(!open_menu){
  219. $(".menu").css({'right': "-0px"});
  220. open_menu=true;
  221.  
  222. }else{
  223. $(".menu").css({'right': "-170px"});
  224. open_menu=false;
  225. }
  226.  
  227. });
  228.  
  229. $(document).keydown(function(e) {
  230.  
  231. if(e.keyCode == 40 || e.keyCode){
  232. $('html, body').stop().animate({
  233. scrollTop: start[arrow_pos+1]
  234. }, 500);
  235. }
  236.  
  237. if(e.keyCode == 38 || e.keyCode == 37){
  238. $('html, body').stop().animate({
  239. scrollTop: start[arrow_pos-1]
  240. }, 500);
  241. }
  242.  
  243.  
  244. });
  245.  
  246. var arrow_keys_handler = function(e) {
  247. switch(e.keyCode){
  248. case 37: case 39: case 38: case 40: // Arrow keys
  249. case 32: e.preventDefault(); break; // Space
  250. default: break; // do not block other keys
  251. }
  252. };
  253. window.addEventListener("keydown", arrow_keys_handler, false);
  254.  
  255. });
  256. ////////////////////////


Będę wdzieczy za pomoc.

Ktoś coś smile.gif?
Go to the top of the page
+Quote Post
fate
post
Post #2





Grupa: Zarejestrowani
Postów: 824
Pomógł: 106
Dołączył: 14.03.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


mi pod ff tez muli wiec nie zagladam nawet na chrome, ale zamysł fajny tylko widać uczniactwo


--------------------
Go to the top of the page
+Quote Post
kamilo818
post
Post #3





Grupa: Zarejestrowani
Postów: 250
Pomógł: 11
Dołączył: 20.01.2014

Ostrzeżenie: (0%)
-----


Cytat(fate @ 3.01.2015, 22:04:27 ) *
mi pod ff tez muli wiec nie zagladam nawet na chrome

A masz jakiś pomysł jak temu zaradzić?

Cytat(fate @ 3.01.2015, 22:04:27 ) *
zamysł fajny tylko widać uczniactwo


Co masz na myśli smile.gif?
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Czemu animujesz warstwy o rozmiarze 9000x9000?


--------------------
Go to the top of the page
+Quote Post
kamilo818
post
Post #5





Grupa: Zarejestrowani
Postów: 250
Pomógł: 11
Dołączył: 20.01.2014

Ostrzeżenie: (0%)
-----


To ostatnia 'orbita'. W większości przypadków nie widoczna ze względu że mało kto będzie miał taki monitor. Ale animuje ją tak samo jak wszystkie poprzednie. Usuwając ją nie będzie kompletnego układu.

Chyba że bym sprawdzał szerokości ekranu i animował tylko te co są widoczne.

Ale nawet wywalając najszersze elementy muli tak samo.
Jednak jak zmniejsze główny element po którym odbywa sie animacja po kole z 6000 do no 2000 to już płynnie przebiega animacja.
Czyli za szeroki jest element?
Go to the top of the page
+Quote Post
fate
post
Post #6





Grupa: Zarejestrowani
Postów: 824
Pomógł: 106
Dołączył: 14.03.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


trzeba zmniejszyc total max do 4k to i tak narazie nisza bo siliniki sie przegrzewają, mam na myśli dopracować żeby wyglądało profesjonalnie bez konkretów co_jest.gif


--------------------
Go to the top of the page
+Quote Post
kamilo818
post
Post #7





Grupa: Zarejestrowani
Postów: 250
Pomógł: 11
Dołączył: 20.01.2014

Ostrzeżenie: (0%)
-----



Wywaliłem wszsytkie orbity poza główna i już całkiem nieźle działa animacja.

Ale czy tak powinno być?

Ok czyli rozmiar ma znaczenie smile.gif

Jeśli chodzi o dopracowanie to jestem w trakcie, mam nadzieje że finał będzie wyglądał lepiej:)

Ten post edytował kamilo818 3.01.2015, 22:52:38
Go to the top of the page
+Quote Post
fate
post
Post #8





Grupa: Zarejestrowani
Postów: 824
Pomógł: 106
Dołączył: 14.03.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


musi być płynnie żeby nie było beznadziejnie, lepsze małe fajerwerki niż wielkie niewypały, coś wymyslisz


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 22:07