在cdk-virtual-scroll-viewport Angular外显示绝对元素

时间:2019-12-06 00:58:16

标签: css angular angular-cdk angular-cdk-virtual-scroll

我有一个cdk-virtual-scroll-viewport元素,并且在此元素中有一个相对定位的div,其中有一个绝对定位的元素。基本上,我希望能够显示在cdk-virtual-scroll-viewport之外的绝对定位的项目但是它被切断了...

这是该问题的重演

https://stackblitz.com/edit/angular-kavjsh

component.html

<div class="container">
  <cdk-virtual-scroll-viewport itemSize="70">
    <div class="test" *cdkVirtualFor="let name of names">
      <p>{{name}}</p>
      <div class="test-item"></div>
    </div>
  </cdk-virtual-scroll-viewport>
</div>

component.css

p {
  font-family: Lato;
}

cdk-virtual-scroll-viewport {
  width: 150px;
  border: 1px solid black;
  height: 600px;
}

.test {
  position: relative;
}

.test-item {
  position: absolute;
  background: black;
  width: 150px;
  height: 100px;
  left: 50%;
}

这是怎么回事

enter image description here

我想要的结果是这个

enter image description here

我尝试了各种定位配置,但无法使其正常工作吗?

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

尝试在测试div或cdk-virtual-scroll-viewport中看到可见的溢出


cdk-virtual-scroll-viewport {
  width: 150px;
  border: 1px solid black;
  height: 600px;
  overflow:visible
}

.test {
  position: relative;
  overflow:visible
}

答案 1 :(得分:0)

您可以使用以下步骤

  • //jQuery time var current_fs, next_fs, previous_fs; //fieldsets var left, opacity, scale; //fieldset properties which we will animate var animating; //flag to prevent quick multi-click glitches $(".next").click(function() { if (animating) return false; animating = true; current_fs = $(this).parent(); next_fs = $(this).parent().next(); //activate next step on progressbar using the index of next_fs $("#progressbar li").eq($("fieldset").index(next_fs)).addClass("active"); //show the next fieldset next_fs.show(); //hide the current fieldset with style current_fs.animate({ opacity: 0 }, { step: function(now, mx) { //as the opacity of current_fs reduces to 0 - stored in "now" //1. scale current_fs down to 80% scale = 1 - (1 - now) * 0.2; //2. bring next_fs from the right(50%) left = (now * 50) + "%"; //3. increase opacity of next_fs to 1 as it moves in opacity = 1 - now; current_fs.css({ 'transform': 'scale(' + scale + ')', 'position': 'absolute' }); next_fs.css({ 'left': left, 'opacity': opacity }); }, duration: 800, complete: function() { current_fs.hide(); animating = false; }, //this comes from the custom easing plugin /* easing: 'easeInOutBack' */ }); }); $(".previous").click(function() { if (animating) return false; animating = true; current_fs = $(this).parent(); previous_fs = $(this).parent().prev(); //de-activate current step on progressbar $("#progressbar li").eq($("fieldset").index(current_fs)).removeClass("active"); //show the previous fieldset previous_fs.show(); //hide the current fieldset with style current_fs.animate({ opacity: 0 }, { step: function(now, mx) { //as the opacity of current_fs reduces to 0 - stored in "now" //1. scale previous_fs from 80% to 100% scale = 0.8 + (1 - now) * 0.2; //2. take current_fs to the right(50%) - from 0% left = ((1 - now) * 50) + "%"; //3. increase opacity of previous_fs to 1 as it moves in opacity = 1 - now; current_fs.css({ 'left': left }); previous_fs.css({ 'transform': 'scale(' + scale + ')', 'opacity': opacity }); }, duration: 800, complete: function() { current_fs.hide(); animating = false; }, //this comes from the custom easing plugin /* easing: 'easeInOutBack' */ }); }); 重置为“初始”或“布局”
  • contain更改为“可见”

overflow

https://stackblitz.com/edit/angular-miqwyw?file=src/app/app.component.css