优化div +屏幕大小调整JS块

放手

我正在努力找出最佳方法是优化此代码。我目前仅使用width @media标签,而JS似乎是我可以控制一系列非常特定的变量来调整此div元素的唯一可靠方法。

我目前意识到这是一团糟,但是我想获得反馈,以查看是否存在任何明显的问题。仍在学习,所以对我轻松一点。

谢谢。

jQuery(document).ready(function($){
    var elementHeight = $('.hs-caption').height();
    var screenHeight = jQuery(window).height();
    var upcomingHeader = $('.fold-header').height() * 2.0;
    if (screenHeight > 960) {
    var heightOffset = 220;         
    } else {
    var heightOffset = 200; 
    } 
    var totalHeight = elementHeight + heightOffset;

function fullscreen(){
    jQuery('#hero').css({
        width: jQuery(window).width(),
        height: jQuery(window).height()
    });
}  
function setToCenterOfParent(element, parent, ignoreWidth, ignoreHeight){
    parentWidth = $(parent).width();
    parentHeight = $(parent).height();  
    elementWidth = $(element).width();
    elementHeight = $(element).height();
    if(!ignoreWidth)
        $(element).css('left', parentWidth/2 - elementWidth/2);
    if(!ignoreHeight)
        $(element).css('top', heightOffset);
}   

function scalar(){
  if (window.innerHeight < (totalHeight * 1.25) + upcomingHeader) {
        console.log("screenHeight is less than elementHeight");       
        $('.hs-info p').css({
            display: 'none'
        }),
        $('.hs-info .btn-slide').css({
            padding: '10px 0px 0px 0px'
        }),
        $('.hs-sponsor').css({
            display: 'none'
        })
    } else {
        console.log("screenHeight is NOT less than elementHeight");       
        $('.hs-info .btn-slide').css({
            padding: '0px'
        }),
        $('.hs-sponsor').css({
            display: 'block'
        }),
        $(".hs-info p").css({
            display: 'block'
        })
    }
}

setToCenterOfParent( $('.hs-caption'), document.body, true, false);
fullscreen();
scalar();

jQuery(window).resize(function() {
    scalar();
    setToCenterOfParent( $('.hs-caption'), document.body, true, false);
    fullscreen();         
});

console.log("height:", elementHeight);
console.log("total height:", elementHeight + heightOffset); 
console.log("screenHeight:", screenHeight); 
console.log("heightOffset:", heightOffset); 
console.log("upcomingHeader:", upcomingHeader);     
});
冬玉

由于目标不是很明确,因此我只能进行一些小的代码编辑,以使其更易于阅读,并且可能会提高一些性能。

jQuery(document).ready(function($) {
  // Define share variables.
  var element = $('.hs-caption');
  var elementWidth, elementHeight;
  var screenWidth, screenHeigth;
  var upcomingHeader = $('.fold-header').height() * 2.0;
  var heightOffset;
  var totalHeight;
  var HEIGHT_RATIO = 1.25;
  var paddingElements = $('.hs-info .btn-slide');
  var displayElements = $('.hs-info p, .hs-sponsor');
  var RESIZE_DELEY = 200;
  var delayedHandler = null;

  function onResize() {
    updateSetting();
    setToCenterOfParent(element, $(document.body), true, false);
    fullscreen();
    scalar();
  };

  function scalar() {
    var innerHeight = window.innerHeight;
    var totalElementHeight = totalHeight * HEIGHT_RATIO + upcomingHeader;
    var isScreenSmaller = (innerHeight < totalElementHeight);
    var padding = isScreenSmaller ? '10px 0px 0px 0px' : '0px';
    var display = isScreenSmaller ? 'none' : 'block';
    paddingElements.css('padding', padding);
    displayElements.css('display', display);
  }

  function updateSetting(){
    screenWidth = $(window).width();
    screenWidth = $(window).height();
    elementWidth = element.width();
    elementHeight = element.height();
    heightOffset = (screenHeight > 960) ? 220 : 200;
    totalHeight = elementHeight + heightOffset;
  }

  function fullscreen() {
    $('#hero').css({
      width: screenWidth,
      height: screenHeigth
    });
  }

  function setToCenterOfParent(element, parent, ignoreWidth, ignoreHeight) {
    var parentWidth = parent.width();
    var parentHeight = parent.width();
    if (!ignoreWidth) {
      element.css('left', parentWidth/2 - elementWidth/2);
    }
    if (!ignoreHeight) {
      element.css('top', heightOffset);
    }
  }

  // Init
  onResize();

  $(window).resize(function() {
    // Don't do this too often
    if (delayedHandler !== null) {
      clearTimeout(delayedHandler);
    }
    // Delayed the function to be executed, so it only updates when user stop
    // resizing for a fixed amount of time.
    delayedHandler = setTimeout(onResize, RESIZE_DELEY);
  });

  console.log("height:", elementHeight);
  console.log("total height:", elementHeight + heightOffset);
  console.log("screenHeight:", screenHeight);
  console.log("heightOffset:", heightOffset);
  console.log("upcomingHeader:", upcomingHeader);
});

这个想法是:

  1. 拔出将要反复查询的所有元素,例如$('.hs-info .btn-slide')$('.hs-info p, .hs-sponsor')$('.hs-caption')似乎也被广泛使用,将其拔出。
  2. 对变量做同样的事情,在这里我不确定您是否会使用setToCenterOfParent其他元素,但是我将尝试输入jquery包装的元素,因此我可以在函数中直接对它们使用jquery。
  3. elementWidth/elementHeight 尚不清楚它是否会更改,因此我保留未编辑的代码。
  4. 添加asettimeout来调整大小,因此jquery在用户调整窗口大小期间不会进行大量计算,并且0.2 sec的延迟应该足够快,以使用户不会感到延迟(或者您可以将RESIZE_DELEY调整为更小的数字)。
  5. 除非你使用一些库与jQuery将发生冲突,保持代码风格相同的是最好的,所以我所有的改变jQuery(foo).bar,以$(foo).bar保持一致性。

我相信,如果没有类似jsfiddle的示例来演示此代码的用途这应该是我们能做的最多的事情

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据视频大小调整div的大小

来自分类Dev

jQuery不调整窗口大小调整div的大小

来自分类Dev

调整div中的文本大小调整img大小

来自分类Dev

根据窗口大小调整div以及内部内容的大小

来自分类Dev

根据图片大小调整div的大小

来自分类Dev

如何将表格大小调整为 div 大小?

来自分类Dev

div 大小调整将相邻的 div 推到错误的位置

来自分类Dev

SSD块大小调整

来自分类Dev

将<video>元素的大小调整为父div

来自分类Dev

Flexbox缩小div而不是按大小调整

来自分类Dev

如何使用其中的文本大小调整div宽度

来自分类Dev

如何根据视口大小调整Div高度?

来自分类Dev

窗口大小调整时右上浮动的Div

来自分类Dev

如何不对桌面窗口大小调整.append div

来自分类Dev

Div中混合内容(图像/文本)的大小调整

来自分类Dev

将 div 大小调整为包含图像的宽度

来自分类Dev

页面大小调整问题。子div不能像父div那样调整大小

来自分类Dev

根据屏幕大小调整文本大小

来自分类Dev

根据屏幕大小调整文本大小

来自分类Dev

将Div放在Div的中心(以及根据内容的大小调整div的大小)?

来自分类Dev

在屏幕调整大小时将Div居中

来自分类Dev

调整屏幕大小时,div移动

来自分类Dev

防止屏幕外div调整大小

来自分类Dev

调整屏幕大小时,div移动

来自分类Dev

CSS在较小的屏幕上调整DIV的大小

来自分类Dev

将所有div的大小调整为最高div的大小

来自分类Dev

如何使div对齐并根据浏览器大小调整大小

来自分类Dev

如何使div对齐并根据浏览器大小调整大小

来自分类Dev

如何根据浏览器大小调整DIV元素的大小?