2017-03-10 142 views
0

我正在使用动态时间轴,父元素在每次点击时都推动子元素200px,问题在于,由于设计原因,在第一次点击滑块按钮后,没有机会在时间轴上仅显示4个元素,我的问题是,如何隐藏子元素在“开始”时被父项溢出,或者如何隐藏在视口上不可见的元素。当父母的溢出受到影响时隐藏div:隐藏;'

// Single timeline element 
    $('<div/>', { 
     'class': 'timeline-holder ' + value.content_type + '-element' + elementClass, 
     'text': 'Text Only', 
     'html': '<div class="circle-timeline circle-background-'+ value.override_content_type_icon +'">' + 
     // '<p>2005</p>' + 
     '<span>' + value.segment_label + '</span>' + 
     '<div class="timeline-block">' + 
     '<span>' + value.segment_label + '</span>' + 
     '<h2>' + value.headline + '<i class="fa fa-star ' + favoriteClass + '" aria-hidden="true"></i>' + 
     '<div class="bookmark ' + bookmarkClass + '">B</div>' + 
     '</h2>' + 
     blockContent + 
     imageBlock + 
     iframeElement + 
     readmoreButton + 
     downloadButton + 
     '</div>' + 
     '</div>' 
    }).appendTo('#timeline-slider'); 

我从JSON文件中读取数据,这里是JS,当用户在其上点击

function moveLeft() { 

    var currentMargin = parseInt(tmSlider.css('margin-left')); 

    // Check if animation is in progress 
    if (!tmSlider.hasClass('animating')) { 

     tmSlider.addClass('animating'); // lock slider with class 

     elementsToMove = timelineData.timeline.elements_to_move; // reset 

     var countElementsLeftToShow = totalElements - stepsPassed - 4; 

     sliderLastMove(countElementsLeftToShow); 

     stepsPassed = stepsPassed + elementsToMove; 

     // Move sldier 
     tmSlider.animate({ 
      'marginLeft': currentMargin - sliderStep 
     }, 500, function() { 
      setTimeout(function() { 
       tmSlider.removeClass('animating'); 
      }, 500); 
     }); 
    } 
} 

function moveRight() { 

    var currentMargin = parseInt(tmSlider.css('margin-left')); 

    // Check if animation is in progress 
    if (!tmSlider.hasClass('animating')) { 

     tmSlider.addClass('animating'); // lock slider with class 

     elementsToMove = timelineData.timeline.elements_to_move; 

     sliderLastMove(stepsPassed); 

     stepsPassed = stepsPassed - elementsToMove; 

     // Move slider 
     tmSlider.animate({ 
      'marginLeft': currentMargin + sliderStep 
     }, 500, function() { 
      setTimeout(function() { 
       tmSlider.removeClass('animating'); 
      }, 500); 
     }); 
    } 
} 

rightArrow.on('click', function() { 
    moveLeft(); 
    prepareData(); 
    // displayArrow() 
}); 

leftArrow.on('click', function() { 
    moveRight(); 
    // displayArrow(); 
}); 

希望这有助于之间,这是我的第一个问题在这里移动滑块,

+0

检查实际的溢出以及它如何渲染只会使问题更加困难。你可以分享决定时间表上显示内容的逻辑吗?与检查DOM和CSS属性相比,使用数据逻辑解决此问题可能会更容易。 – Shilly

+0

如果您只能显示4个元素,那么您是否可以跟踪元素的数量,并在超过4个元素时执行您需要执行的操作? –

+0

4个元素总是可见的,我使用Ajax加载内容,并且所有元素都将被加载,但只有4个会在视图端口上完全可见,两个div上的一半是可见的 –

回答

0

我忘了这个问题,但我做到了,而且很简单。 我一直在观察元素offset().left,直到等于或大于“右移”箭头的offset().left,而不是相反的那一方。