2016-07-08 3 views
0

Я обертываю сайт, который включает в себя несколько элементов (изображение/текст/диагональная линия), которые должны масштабироваться пропорционально на разных экранах.Почему мой jQuery изменяет размер стрельбы непоследовательно?

Поскольку есть текст, который нужно изменить, я использую jQuery для вычисления измерений для всех элементов на основе отношения. Это было лучшее решение, о котором я мог думать в то время, и с приближением срока, я думаю, что я застрял с ним. Это одностраничный сайт, который прокручивается по странице (например, полные страницы в окне просмотра).

Here's a link to the demo site

Идея коды:

  • Проверяет высоту окна просмотра, чтобы установить размер контейнера
  • Установите высоту обертки элемента, основанному на размере контейнера и необходимый поля
  • Установите ширину основываясь на соотношении
  • Используйте эти значения, чтобы рассчитать размер шрифта, размер изображения, nd offsets

Поскольку экран изменен, элемент пропорционально сокращается, чтобы заполнить доступное пространство.

Это выглядит вроде как это:

Screenshot of how it should look

Есть две панели, как это. Я повторно использую тот же код (с разными именами переменных и несколькими различиями в размерах) для второй панели.

Вот мой Javascript/JQuery для первого:

 // Set panel height on page load & resize 
      $(window).on("resize", function() { 
      var $panelHeight = $(window).height(); 
      var $headerHeight = $('.banner').height(); 

     // General height for panels 
      $('.bg-panel').css('height', $panelHeight); 
      $('.bg-panel').css('padding-top', $headerHeight); 

     }).resize(); 

     // We want to scale content proportionately 
     // First let's get some breakpoints 
      var $breakPoint = 768; 
      var $breakPointSM = 480; 

     // Panel 1 
      $(window).on("resize", function() { 

     // Check height of current panel 

     // If on single-column view, we want to measure the space between the text column and bottom of screen 
     // Otherwise, height of entire panel 

     var $windowHeight = $('.panel-test').height(); 

     // But we need to subtract the header height, so our math is correct 
     var $headerHeight = $('.banner').height(); 
     var $windowHeight = $windowHeight - $headerHeight; 

     // Now we have the correct height to work with 

     // We're at 768px or below, subtract the text element from the overall height 
     if ($(document).width() <= $breakPoint) { 
      var $heightofDiv = $('.panel-1-text').height(); 
      var $mobileHeight = $windowHeight - $heightofDiv; 
      var $windowHeight = $mobileHeight; 
     } 

     // Save the window height for calculating our margins! 
     var $windowHeightforMargins = $windowHeight; 

     // Top and bottom margins 
     var $marginTop = $windowHeight * (102/792); // ratio from PSD 
     var $marginBottom = $windowHeight * (84/792); // ratio from PSD 
     var $marginTotal = $marginTop + $marginBottom; 


     // Responsive solution 
     // As browser shrinks, reduce the height of panel so it produces a smaller container 
     if ($(document).width() > 1200 && $(document).width() <= 1440) { 
      var $windowHeight = $windowHeight * 0.9; 
      var $marginTop = $marginTop * 2; 
     } 
     else if ($(document).width() > 990 && $(document).width() <= 1200) { 
      var $windowHeight = $windowHeight * 0.8; 
      var $marginTop = $marginTop * 3; 
     } 
     else if ($(document).width() > $breakPoint && $(document).width() <= 990) { 
      var $windowHeight = $windowHeight * 0.7; 
      var $marginTop = $marginTop * 3.5; 
     } 
     else if ($(document).width() < $breakPoint) { // Ratio here goes up again because we're accounting for new height with $mobileHeight 
      var $windowHeight = $windowHeight * 0.8; 
     } 

     // This ratio determines the width of the container 
     var $ratio = 697/607; // from PSD 

     // Set container height, depending on height of panel 
     if ($(document).width() <= $breakPointSM) { 
      var $taglinesHeight = ($windowHeight * 1.5); // Scale up for phones 
     } 
     else if ($(document).width() > $breakPointSM && $(document).width() <= $breakPoint){ 
      var $taglinesHeight = ($windowHeight * 1); // Scale down for tablet 
     } 
     else { 
      var $taglinesHeight = $windowHeight - $marginTotal; 
     } 

     // Set container width as ratio of height 
     if ($(document).width() <= $breakPoint) { 
      var $taglinesWidth = $taglinesHeight * $ratio 
     } else { 
      var $taglinesWidth = $taglinesHeight * $ratio 
     } 

     $('.panel-test .bg-taglines').css("width", $taglinesWidth); 
     $('.panel-test .bg-taglines').css("height", $taglinesHeight); 

     // Add top margin if above breakpoint 
     if ($(document).width() > $breakPoint) { // No margin unless above 768px 
      $('.panel-test .bg-taglines').css("margin-top", $marginTop); 
     } 
     else { 
      $('.panel-test .panel-1-tagline').css("bottom", $marginTop); 
     } 

     // Set font size 
     var $fontSize = $taglinesWidth * 0.12; 
     $('.bg-panel h4').css("font-size", $fontSize); 

     // Set pink line origin (relative to bottom-left of frame) 
     var $pinkX = $taglinesWidth * (286/705); 
     var $pinkY = $taglinesHeight * (192/607); 
     $('.panel-test .animation-wrapper').css("left", $pinkX); 
     $('.panel-test .animation-wrapper').css("bottom", $pinkY); 

     // Set image size 
     var $imageWidth = $taglinesWidth * 0.556; 
      $('.panel-test .scaleable-image').css("width", $imageWidth); 

     // Set h3 margin from top 
     if ($(document).width() >= $breakPoint) { 
      var $marginH3 = $windowHeight * (217/792); // ratio from PSD 
      $('.panel-test h3').css("margin-top", $marginH3); 
     } else { 
      // CSS 
     } 

     // Set line offset from top 
     var $lineOffset = $taglinesHeight * 0.7; 
      $('.panel-test .line-wrapper').css("top", $lineOffset); 

     // Set line length 
     var $lineLong = $taglinesWidth * 1; 
      $('.panel-test .pink-line').css("width", $lineLong); 

}).resize(); 

Он работает: MOST времени.

Если я перетащил свое окно для изменения размера, некоторые элементы будут изменены. Другие нет.

Обновление страницы обычно решает его, но сейчас элементы (в основном изображения!) Просто не масштабируются правильно и не синхронизируются с другими элементами.

Я очень новичок в jQuery, и это мое первое крупное мероприятие. Новое в использовании resize. Надеюсь, я просто сделал головокружение, которое легко исправить.

Спасибо!

LIVE SITE LINK

Другие плагины в использовании: jQuery Scrollify (для полной прокрутки страницы) и ScrollReveal.

ответ

0

Угадайте, я могу ответить на свой вопрос.

Проблема заключалась в том, что значения смешались при прокрутке с одной полноэкранной панели на другую.

Изменение этого:

$(window).on("resize", function() {

Для этого:

$(window).on("resize load scroll", function (e) {

... решить эту проблему. Я не уверен, что это правильный способ сделать это, но изменения в размерах все работают нормально.

Смежные вопросы