如何在单击一个按钮时在多个div中应用水平滚动?

时间:2018-09-06 06:43:17

标签: javascript html css reactjs scroll

我有10个div块,其中水平滚动是单独的。我要实现的目标是创建一个按钮,在该按钮上单击所有10 div都将水平滚动到某个限制。

这是我想克服这个问题的js代码。 我正在使用开关盒来确定单击了哪个按钮。在这种情况下,我单击了右按钮,因此将执行右案件及其中的代码。

case 'right':
    if (count == inspectionData.length-1) {
        alert('No More Data');
        return;
    }
    this.setState({
        count:count+2
    },()=>{
        var elmnt = document.getElementById("diva"+count);
        elmnt.scrollIntoView();
        var elmnt1 = document.getElementById("divb"+count);
        elmnt1.scrollIntoView();
        var elmnt2 = document.getElementById("divc"+count);
        elmnt2.scrollIntoView();
        var elmnt3 = document.getElementById("divd"+count);
        elmnt3.scrollIntoView();
        var elmnt4 = document.getElementById("dive"+count);
        elmnt4.scrollIntoView();
        var elmnt5 = document.getElementById("divf"+count);
        elmnt5.scrollIntoView();
        var elmnt6 = document.getElementById("divg"+count);
        elmnt6.scrollIntoView();
        var elmnt7 = document.getElementById("divh"+count);
        elmnt7.scrollIntoView();
        var elmnt8 = document.getElementById("divi"+count);
        elmnt8.scrollIntoView();
        var elmnt9 = document.getElementById("divj"+count);
        elmnt9.scrollIntoView();
        var elmnt10 = document.getElementById("divk"+count);
        elmnt10.scrollIntoView();
    })
    break;

请提供任何有用的建议。

1 个答案:

答案 0 :(得分:1)

由于看不到您的HTML和CSS代码,因此我不得不想象您需要什么。接下来是我的代码:

let pptoms = Array.from(document.querySelectorAll(".pptom"))

pptoms.map((p) =>{
  p.divs = Array.from(p.querySelectorAll(".box"))
})

let count = 7;
pptoms.map((p) =>{
  p.divs[count].scrollIntoView();
})




let radios = Array.from(document.querySelectorAll("#controls [name='count']"));

radios.map((r) =>{
  r.addEventListener("change",()=>{
    count = parseInt(r.value);
    console.log(count)
    pptoms.map((p) =>{
      p.divs[count].scrollIntoView();
    })
  })
})
.box {
  border: 1px solid;
  width: 5em;
  height:2em;
  line-height:2em;
  text-align: center;
  display: inline-block;
}

.container{width:50em;}

.pptom{
  width:15em; 
  border:1px solid red; 
  overflow:scroll; 
  margin: .5em;
}
<div class="pptom">
<div class="container">
<div class ="box">box a 0</div>
<div class ="box">box a 1</div>
<div class ="box">box a 2</div>
<div class ="box">box a 3</div>
<div class ="box">box a 4</div>
<div class ="box">box a 5</div>
<div class ="box">box a 6</div>
<div class ="box">box a 7</div>
<div class ="box">box a 8</div>
</div>
</div> 
<div class="pptom">
<div class="container">
<div class ="box">box b 0</div>
<div class ="box">box b 1</div>
<div class ="box">box b 2</div>
<div class ="box">box b 3</div>
<div class ="box">box b 4</div>
<div class ="box">box b 5</div>
<div class ="box">box b 6</div>
<div class ="box">box b 7</div>
<div class ="box">box b 8</div>
</div>
</div>

<form id="controls">
  <label><input type="radio" name="count" value="0"  />0</label>
  <label><input type="radio" name="count" value="7" checked />7</label> 
  <label><input type="radio" name="count" value="8"  />8</label> 
</form>

在这种情况下,我使用count = 7,但是您可以使用您的逻辑来获取计数值。 另外,由于我不想弄乱HTML,因此我只使用了2个div块,但是您可以根据需要添加任意数量的

我希望它会有所帮助。如果没有,请提供更多详细信息。