2016-12-13 74 views
0

這是我目前有: https://jsfiddle.net/Lt4cmfbo/在div中保持滾動位置,因爲兄弟div縮小或擴大?

CSS

.parent { 
    position: relative; 
    float: none; 
    height: 400px; 
    width: auto; 
    background: purple; 
    overflow: hidden; 
    display: flex; 
    flex-direction: column; 
} 

.childOne { 
    background: blue; 
    width: 100%; 
    height: auto; 
    overflow-y: auto; 
    flex-grow: 1; 
} 

.childTwo { 
    background: red; 
} 

.input-chat { 
    background-color: white; 
    margin: 5px auto; 
    border: solid 1px #000; 
    min-height:10px; 
    max-height: 100px; 
    overflow: auto; 
    width: 95%; 
} 

HTML

<div class="parent"> 
    <div class="childOne"> 
    <p> 
     content #1 
     <br> 
     <br> 
     <br> 
     <br> 
     <br> 
     <br> 
     <br> 
     <br> 
     <br> 
     <br> 
     <br> 
     <br> 
     <br> 
     <br> 
     <br> 
     <br> 
     <br> 
     <br> 
     <br> 
     <br> 
     hello 
    </p> 
    </div> 
    <div class="childTwo"> 
     <div class="input-chat" contentEditable="true"></div> 
    </div> 
</div> 

基本上,我試圖建立一個聊天。父div的內部是兩個子div:最上面的一個是可滾動的(用於顯示消息),最下面的是輸入消息發送。

我使用柔性框來控制高度,以便兩個子div總是等於父div高度。底部子div必須根據內容(我已經完成)擴展或縮小,而頂級子div根據底部子div的高度(我也已完成)擴展或縮小。

問題是,我也希望頂部div保持其高度變化的滾動位置。如果我滾動到頂部的子div的底部,並看到'你好',我想仍然看到'你好',因爲我在底部div中輸入了幾行。但是,相反,底部div似乎隱藏它,除非我手動滾動顯示它。

我希望這已經足夠清楚了,但如果不是,我可以試着用其他方式來解釋它。

我希望我的答案是在CSS(或CSS3),但如果這是不可能的,jQuery或純JavaScript是好的。

+0

如果你正在使用jQuery OK,你可以使用[滾動](https://api.jquery.com/scroll /) 然後在滾動事件中保存滾動位置,然後在用戶按「Enter」時滾動回到那裏 – bobjoe

+0

問題在於,我希望它甚至在用戶點擊「輸入」之前就保持在它所在的位置。這就是說,你給了我一個想法,以如何解決這個與jquery ......但我想知道是否有一個更清潔的解決方案?當我最初搞砸這個時,我給「childTwo」班增加了一個最小高度。這實際上保持了頂級孩子的滾動(以我想要的確切方式),但它弄亂了底部div的外觀,所以我無法保留它。 –

+1

我想這個答案解決了它(如何使滾動停留在底部):http://stackoverflow.com/a/34330934/2827823 ....讓我知道如果它確實,我把它作爲一個騙局 – LGSon

回答

0

設置scrollTop等於scrollHeight

let c1 = document.querySelector('.childOne'), 
 
    c2 = document.querySelector('.childTwo>div'), 
 
    b = document.querySelector('button'); 
 

 
b.addEventListener(
 
    'click',() => { 
 
    c1.innerHTML += '<br>' + c2.innerHTML; 
 
    c1.scrollTop = c1.scrollHeight; 
 
    c2.innerHTML = ''; 
 
    c2.focus(); 
 
    }, 
 
    false);
.parent { 
 
    position: relative; 
 
    float: none; 
 
    height: 400px; 
 
    width: auto; 
 
    background: purple; 
 
    overflow: hidden; 
 
    display: flex; 
 
    flex-direction: column; 
 
} 
 
.childOne { 
 
    background: blue; 
 
    width: 100%; 
 
    height: auto; 
 
    overflow-y: auto; 
 
    flex-grow: 1; 
 
} 
 
.childTwo { 
 
    background: red; 
 
} 
 
.test { 
 
    background-color: white; 
 
    margin: 5px auto; 
 
    border: solid 1px #000; 
 
    min-height: 10px; 
 
    max-height: 100px; 
 
    overflow: auto; 
 
    width: 95%; 
 
}
<div class="parent"> 
 
    <div class="childOne"> 
 
    <p> 
 
     content #1 
 
     <br><br><br><br><br><br><br><br><br> 
 
     <br><br><br><br><br><br><br><br><br> 
 
     <br><br>hello 
 
    </p> 
 
    </div> 
 
    <div class="childTwo"> 
 
    <div class="test" contentEditable="true"></div> 
 
    <button> 
 
     Add</button> 
 
    </div> 
 
</div>

+0

我很感謝你的回答!但我可能並不清楚:我的問題是,當底部的子div擴展時,它會覆蓋頂部div內的內容。 所以,如果我滾動到底部,它說'你好',並開始輸入幾行,擴展div現在掩蓋'你好',即使高度似乎調整得很好。 –