Проблемы с анимацией
Здравствуйте.
Пациент: https://kulibinstudio.com/all_collections/ Проблема: Чтобы хоть как то разгрузить страницу по весу, решил вставлять в определенные id картинки и видео при первом наведении на главный блок . И все получилось, вес упал в 3 раза, все работает. Но при наведении на главное фото почему то тормозит немного. Это очень странно, так как при наведении на превью в области просмотра фото все сменяется молниеносно, причем красиво с анимацией. А при наведении на главную картинку - тормозит. Вот видео для лучшего понимания: https://nimb.ws/ozX0kC |
У вас тонны повторяющегося js и css кода на странице, а вы картинки оптимизируете.
|
Цитата:
и кстати он не повторяющийся, а просто используется для каждого блока отдельно |
если можно как то оптимизировать это, то буду благодарен):
{% for product in products %} <!-- Карточка товара --> <div class="product-layout product-grid grid-style col-lg-4 col-md-4 col-sm-4 col-xs-6 product-items" id="box_pro_{{ product.product_id }}c"> <script> let msd_box{{ product.product_id }} = 1; $('#box_pro_{{ product.product_id }}c').mouseover(function() { if (msd_box{{ product.product_id }} == 1) { {% if product.video %}$('#msd_box{{ product.product_id }}_2').html('<video id="mvideo{{ product.product_id }}" width="100%" preload="none" autoplay loop muted><source src="{{ product.video }}" type="video/mp4;codecs="avc1.42E01E, mp4a.40.2""></video>');{% endif %} $('#msd_box{{ product.product_id }}_3').html('<img src="{{ product.thumb2 }}" alt="{{ product.name }}" class="ani5">'); $('#msd_box{{ product.product_id }}_4').html('<img src="{{ product.thumb3 }}" alt="{{ product.name }}" class="ani5">'); $('#msd_box{{ product.product_id }}_5').html('<img src="{{ product.thumb4 }}" alt="{{ product.name }}" class="ani5">'); $('#msd_box{{ product.product_id }}_6').html('<img src="{{ product.thumb5 }}" alt="{{ product.name }}" class="ani5">'); {% if not product.video %}{% if product.thumb6 %}$('#msd_box{{ product.product_id }}_7').html('<img src="{{ product.thumb6 }}" alt="{{ product.name }}" class="ani5">');{% endif %}{% endif %} msd_box{{ product.product_id }} = 0 } }); $('#box_pro_{{ product.product_id }}c').mouseleave(function() { timer{{ product.product_id }} = window.setTimeout(function() { $('#msd_box{{ product.product_id }}_1').addClass('active'); $('#msd_box{{ product.product_id }}_1').addClass('no_scale'); $('#msd_data{{ product.product_id }} span').removeClass('active'); },4000); }); $('#box_pro_{{ product.product_id }}c').mouseenter(function() { clearTimeout(timer{{ product.product_id }}); }); </script> <div class="product-thumb pro_b2 scrollflow -slide-left -opacity {% if product.quantity == 0 %}sold_out{% endif %} kep11"> <div class="product-item"> <div class="image"> <!-- Блок просмотра выбранного медиа --> {% if product.quantity == 0 %} <img src="/image/catalog/site_img/sold_out.png" class="sold_out_img ani2"> {% endif %} <a href="{{ product.href }}" id="gl_img_{{ product.product_id }}c"> <span id="msd_box{{ product.product_id }}_1" class="msd_box ani5 active no_scale"> <img src="{{ product.thumb }}" alt="{{ product.name }}" class="ani5"> </span> <span id="msd_data{{ product.product_id }}"> {% if product.video %} <span id="msd_box{{ product.product_id }}_2" class="msd_box ani5"></span> {% endif %} {% if product.thumb2 %} <span id="msd_box{{ product.product_id }}_3" class="msd_box ani5"></span> {% endif %} {% if product.thumb3 %} <span id="msd_box{{ product.product_id }}_4" class="msd_box ani5"></span> {% endif %} {% if product.thumb4 %} <span id="msd_box{{ product.product_id }}_5" class="msd_box ani5"></span> {% endif %} {% if product.thumb5 %} <span id="msd_box{{ product.product_id }}_6" class="msd_box ani5"></span> {% endif %} {% if not product.video %} {% if product.thumb6 %} <span id="msd_box{{ product.product_id }}_7" class="msd_box ani5"></span> {% endif %} {% endif %} </span> </a> </div> <!-- // Блок просмотра выбранного медиа --> <div class="ss25"> {% if product.thumb %} <div> <img src="{{ product.thumb0min }}" alt="{{ product.name }}" class="img-responsive" id="top_img_{{ product.product_id }}c" /> </div> <script> $('#top_img_{{ product.product_id }}c').mouseover(function() { $('#msd_data{{ product.product_id }} span').removeClass('active'); $('#msd_box{{ product.product_id }}_1').removeClass('no_scale'); $('#msd_box{{ product.product_id }}_1').addClass('active'); }); </script> {% endif %} {% if product.video %} <div class="relative" id="global_video_id{{ product.product_id }}c"> {% if product.poster1min %} <img src="{{ product.poster1min }}" alt="{{ product.name }}" class="img-responsive" /> {% else %} <img src="{{ product.thumb4min }}" alt="{{ product.name }}" class="img-responsive" /> {% endif %} <div class="ad_video_icon"><i class="fa fa-play-circle" aria-hidden="true"></i></div> </div> <script> $('#global_video_id{{ product.product_id }}c').mouseover(function() { $('#msd_data{{ product.product_id }} span').removeClass('active'); $('#msd_box{{ product.product_id }}_1').removeClass('active'); $('#msd_box{{ product.product_id }}_2').addClass('active'); }); </script> {% endif %} {% if product.thumb2 %} <div> <img src="{{ product.thumb2min }}" alt="{{ product.name }}" class="img-responsive" id="ad_img1_{{ product.product_id }}c" /> </div> <script> $('#ad_img1_{{ product.product_id }}c').mouseover(function() { $('#msd_data{{ product.product_id }} span').removeClass('active'); $('#msd_box{{ product.product_id }}_1').removeClass('active'); $('#msd_box{{ product.product_id }}_3').addClass('active'); }); </script> {% endif %} {% if product.thumb3 %} <div> <img src="{{ product.thumb3min }}" alt="{{ product.name }}" class="img-responsive" id="ad_img2_{{ product.product_id }}c" /> </div> <script> $('#ad_img2_{{ product.product_id }}c').mouseover(function() { $('#msd_data{{ product.product_id }} span').removeClass('active'); $('#msd_box{{ product.product_id }}_1').removeClass('active'); $('#msd_box{{ product.product_id }}_4').addClass('active'); }); </script> {% endif %} {% if product.thumb4 %} <div> <img src="{{ product.thumb4min }}" alt="{{ product.name }}" class="img-responsive" id="ad_img3_{{ product.product_id }}c" /> </div> <script> $('#ad_img3_{{ product.product_id }}c').mouseover(function() { $('#msd_data{{ product.product_id }} span').removeClass('active'); $('#msd_box{{ product.product_id }}_1').removeClass('active'); $('#msd_box{{ product.product_id }}_5').addClass('active'); }); </script> {% endif %} {% if product.thumb5 %} <div> <img src="{{ product.thumb5min }}" alt="{{ product.name }}" class="img-responsive" id="ad_img4_{{ product.product_id }}c" /> </div> <script> $('#ad_img4_{{ product.product_id }}c').mouseover(function() { $('#msd_data{{ product.product_id }} span').removeClass('active'); $('#msd_box{{ product.product_id }}_1').removeClass('active'); $('#msd_box{{ product.product_id }}_6').addClass('active'); }); </script> {% endif %} {% if not product.video %} {% if product.thumb6 %} <div> <img src="{{ product.thumb6min }}" alt="{{ product.name }}" class="img-responsive" id="ad_img5_{{ product.product_id }}c" /> </div> <script> $('#ad_img5_{{ product.product_id }}c').mouseover(function() { $('#msd_data{{ product.product_id }} span').removeClass('active'); $('#msd_box{{ product.product_id }}_1').removeClass('active'); $('#msd_box{{ product.product_id }}_7').addClass('active'); }); </script> {% endif %} {% endif %} </div> <div class="button-group f33c"> <!-- Кнопки --> <div class="inner"> <button type="button" data-toggle="tooltip" data-placement="top" class="button-cart" onclick="cart.add('{{ product.product_id }}');" title="{{ button_cart }}"><span>{{ button_cart }}</span></button> <button type="button" data-toggle="tooltip" data-placement="top" title="{{ button_wishlist }}" class="button-wishlist" onclick="wishlist.add('{{ product.product_id }}');"><span>{{ button_wishlist }}</span></button> <button type="button" data-toggle="tooltip" data-placement="top" title="{{ button_compare }}" class="button-compare" onclick="compare.add('{{ product.product_id }}');"><span>{{ button_compare }}</span></button> <button type="button" data-toggle="tooltip" data-placement="top" title="{{ text_viar }}" class="viar_cat" onclick="alert('{{ text_viar_tech }}')"></button> <button type="button" data-toggle="tooltip" data-placement="top" title="{{ button_quickview }}" class="button-quickview" onclick="ptquickview.ajaxView('{{ product.href }}')"><span>{{ button_quickview }}</span></button> </div> </div> <!-- // Кнопки --> </div> </div> </div> <!-- // Карточка товара --> {% endfor %} |
Цитата:
Цитата:
Скорее всего, вы писали о размере страницы + все подгружаемые медиа элементы. Только в этом случае "вес" страницы мог уменьшиться в 3 раза. Однако для подобного обычно используют ленивую загрузку (lazyload). |
Цитата:
нужно наверное каждому из них задавать свою позицию top:-370px. а при наведении менять ее на активную top:0 Цитата:
if (msd_box{{ product.product_id }} == 1) { *код вставки медиа в нужный блок* msd_box{{ product.product_id }} = 0 } т.е. один раз выполняем, а далее просто игнорируем, так как код уже в блоках. Увидел что гугл поставил оценку 96 и с 14-15 мб опустил вес страницы на 4+Вот и обрадовался))) Костыльно, но работает. Жаль только что с анимацией нужно думать. Я ради интереса добавил в стиль неактивным блокам display:none а активному display:block, тогда и проблема ушла, никаких задержек абсолютно. Но и анимация при наведении пропала(( Поэтому буду пробовать расположить каждый из блоков в разных координатах. Или может есть предложение?) К слову, скрипты по одному поубирал из блоков и отправил вниз блока все вместе, а не постоянное открытие и закрытие <script> |
Часовой пояс GMT +3, время: 22:06. |