3

我有一个包含三个带有图像的网格的画廊。网格大小根据屏幕大小而变化,我已经使用 Media-Query 实现了这一点 - 即,在桌面上,网格的宽度将是 33%,以使三列视图彼此相邻,而在平板电脑上,它将是 50%制作两列视图,在手机上,每个网格制作一列视图将是 100%。

我这样做的原因是创建一个包含不同高度图像的平铺画廊 - 如果我以正常方式执行此操作,它将在浮动时生成白色空白空间。

所以为了解决这个问题,在这个网站上几个成员的帮助下,我们创建了一个 JavaScrip 函数,当屏幕尺寸是平板电脑时,它将把 Grid3 内的所有图像平等地移动到 Grid1 和 Grid2,所以我们摆脱了第三个网格制作精细的两列视图。一切都很好!

现在,问题是- 在 Chrome 和 IE 上 - 由于某种原因,该功能在时间之前被触发,我需要你的帮助来帮助我找到它!请在这里自己尝试:[http://90.195.175.51:93/portfolio.html][2]

在 Chrome 或 IE 上慢慢地 - (在 Firefox 上也可以尝试) - 尝试将窗口大小从大到小,您会注意到顶部标题更改为响应式标题之前(这表明您在小屏幕)图像已发送到 Grid1 和 Grid 2!但时间之前有几个 px。正如它所说的在<770上触发它的功能。

希望我的问题足够清楚,可以帮助我解决这个阻止我启动网站的问题。谢谢。

这是JavaScrip:

//Gallery Grid System//
var testimonial = $(".testimonial, .galleryItem", "#grid3");
(function () {
    $(document).ready(GalleryGrid);

    $(window).resize(GalleryGrid);
})(jQuery);

function GalleryGrid() {
    var grid3 = $('#grid3');
    var width = $(window).width();
    if (width < 1030 && width > 770) {
        var grid1 = $('#grid1');
        var grid2 = $('#grid2');

        for (var i = 0; i < testimonial.length; i++) {
            if (i < testimonial.length / 2) {
                grid1.append(testimonial[i]);
            } else {
                grid2.append(testimonial[i]);
            }
        }
    } else {
        grid3.append(testimonial);
    }
}

注意:以下是所有功能的整个页面:

 $(document).ready(function () {

     //Prevent clicking on .active links
     $('.active').click(function (a) {
         a.preventDefault();
     });


     //Allow :active on touch screens
     document.addEventListener("touchstart", function () {}, true);


     //Hide toolbar by default
     window.addEventListener('load', function () {
         setTimeout(scrollTo, 0, 0, 0);
     }, false);


     //Scroll-up button
     $(window).scroll(function () {
         if ($(this).scrollTop() > 100) {
             $('.scrollup').fadeIn();
         } else {
             $('.scrollup').fadeOut();
         }
     });

     $('.scrollup').click(function () {
         $("html, body").animate({
             scrollTop: 0
         }, 600);
         return false;
     });


     //StickyBox
     $(function () {
         $.fn.scrollBottom = function () {
             return $(document).height() - this.scrollTop() - this.height();
         };
         var $StickyBox = $('.detailsBox');
         var $window = $(window);

         $window.bind("scroll resize", function () {
             var gap = $window.height() - $StickyBox.height() - 10;
             var footer = 288 - $window.scrollBottom();
             var scrollTop = $window.scrollTop();

             $StickyBox.css({
                 top: 'auto',
                 bottom: 'auto'
             });

             if ($window.width() <= 770) {
                 return;
                 $StickyBox.css({
                     top: '0',
                     bottom: 'auto'
                 });
             }

             if (scrollTop < 50) {
                 $StickyBox.css({
                     bottom: "auto"
                 });

             } else if (footer > gap - 100) {
                 $StickyBox.css({
                     top: "auto",
                     bottom: footer + "px"
                 });

             } else {
                 $StickyBox.css({
                     top: 80,
                     bottom: "auto"
                 });
             }
         });
     });


     //Change items location depending on the width of the screen//
     $(function () { //Load Ready

         function myFunction() {
             var insert = $(window).width() <= 770 ? 'insertBefore' : 'insertAfter';
             $('#home-sectionB img')[insert]($('#home-sectionB div'));
             $('#home-sectionD img')[insert]($('#home-sectionD div'));
         }
         myFunction(); //For When Load
         $(window).resize(myFunction); //For When Resize
     });


     //Contact Form//
     $(".input").addClass('notSelected');
     $(".input").focus(function () {
         $(this).addClass('selected');
     });

     $(".input").focusout(function () {
         $(this).removeClass('selected');
     });

     $(document).ready(function () {
         GalleryGrid();
         $(window).resize(GalleryGrid);
     });
     //Gallery Grid System//
     var testimonial = $(".testimonial, .galleryItem", "#grid3");
     (function () {
         $(document).ready(GalleryGrid);

         $(window).resize(GalleryGrid);
     })(jQuery);

     function GalleryGrid() {
         var grid3 = $('#grid3');
         var width = $(window).width();
         if (width < 1030 && width > 770) {
             var grid1 = $('#grid1');
             var grid2 = $('#grid2');

             for (var i = 0; i < testimonial.length; i++) {
                 if (i < testimonial.length / 2) {
                     grid1.append(testimonial[i]);
                 } else {
                     grid2.append(testimonial[i]);
                 }
             }
         } else {
             grid3.append(testimonial);
         }
     }


     //Testimonials Animation//
     $(".testimonial").hover(function () {
         $(".testimonial").addClass('testimonialNotActive');
         $(this).removeClass('testimonialNotActive').addClass('testimonialActive');
     },

     function () {
         $(".testimonial").removeClass('testimonialNotActive');
         $(this).removeClass('testimonialActive');
     });


     //Portfolio Gallery Filter//
     (function () {
         var $portfolioGallerySection = $('#portfolio-sectionB'),
             $filterbuttons = $('#portfolio-sectionA a');

         $filterbuttons.on('click', function () {
             var filter = $(this).data('filter');

             $filterbuttons.removeClass('portfolio-sectionAClicked');
             $(this).addClass('portfolio-sectionAClicked');

             $portfolioGallerySection.attr('class', filter);
             $('.galleryItem').removeClass('selectedFilter');
             $('.galleryItem.' + filter).addClass('selectedFilter');
         });
     }());
 });
4

3 回答 3

0

您的问题是 CSS 媒体查询和 jQuery$(window).width()并不总是对齐。

function getCSSWidth() {
    var e = window, a = 'inner';
    if (!('innerWidth' in window )) {
        a = 'client';
        e = document.documentElement || document.body;
    }
    return e[ a+'Width' ];
}

用这个代替$(window).width()

修改自http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/

于 2013-09-08T08:48:15.360 回答
0

我认为这可以解决您的问题(但我不太确定)

//Put that before the document ready event
(function($,sr){

  // debouncing function from John Hann
  // http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/
  var debounce = function (func, threshold, execAsap) {
      var timeout;

      return function debounced () {
          var obj = this, args = arguments;
          function delayed () {
              if (!execAsap)
                  func.apply(obj, args);
              timeout = null;
          };

          if (timeout)
              clearTimeout(timeout);
          else if (execAsap)
              func.apply(obj, args);

          timeout = setTimeout(delayed, threshold || 100);
      };
  }
  // smartresize 
  jQuery.fn[sr] = function(fn){  return fn ? this.bind('resize', debounce(fn)) : this.trigger(sr); };

})(jQuery,'smartresize');


// Here you call GalleryGrid (replace $(window).resize(GalleryGrid) with that):
$(window).smartresize(GalleryGrid);

http://www.paulirish.com/2009/throttled-smartresize-jquery-event-handler/

于 2013-09-08T08:54:39.993 回答
0

原因是你的垂直滚动条。你的内容固定在width=1030,但是当窗口大小为1030时,视口的大小实际上是:窗口大小(1030)-垂直滚动条

尝试设置

<body style="overflow:hidden">

当滚动条被移除时,您将看到它可以正常工作。或尝试设置:

<link href="assets/css/tablets-landscape.css" rel="stylesheet" type="text/css" media="screen and (max-width : 1045px)"/>

设置max-width:1045px为弥补滚动条,你会看到它工作正常。

你的 javascript 应该是这样的:

var width = $(window).width() + verticalscrollbarWidth;
于 2013-09-08T09:39:55.960 回答