2017-04-08 64 views
1

我试图让FB消息系统现在我可以将对话框附加到eachother旁边,但我如何将最小化的对话框定位在div底部?迷你/最大化“对话框”效果

在演示打开2周或更多的对话框点击创造出比点击标题栏将最小化/最大化对话框按钮。我要的是一个FB消息影响$(this)标题栏必须下井

Private = { 
 
\t count: 0, 
 
\t windowsOpen: [], 
 
\t closeDialog: function(evt){ 
 
\t \t evt.parent().parent().remove() 
 
\t \t Private.removeFromArray(evt.parent().text()) 
 
\t }, 
 
    createDialog: function(nickname) { 
 
     var dialog = $("#private-dialog"), 
 
\t \t \t dialogCloseButton = $("<span />", { 
 
\t \t \t \t class: "ct icon-cancel close-private-dialog" 
 
\t \t \t }), 
 
      dialogHeader = $("<div />", { 
 
       class: "private-section" 
 
      }), 
 
      dialogInit = $("<div />", { 
 
       class: "private-init", 
 
       html: "Here will come the messages" 
 
      }), 
 
      dialogTitle = $("<div />", { 
 
       class: "private-title", 
 
       html: nickname 
 
      }); 
 

 
\t \t dialogTitle.append(dialogCloseButton) 
 
     dialogHeader.append(dialogTitle, dialogInit) 
 
     dialog.append(dialogHeader) 
 
    }, 
 
\t dialogChecker: function(nickname){ 
 
\t \t if(Private.windowsOpen.indexOf(nickname) === -1){ 
 
\t \t \t Private.windowsOpen.push(nickname) 
 
\t \t \t Private.createDialog(nickname) 
 
\t \t } else { 
 
\t \t \t console.log("this dialog is already open") 
 
\t \t } 
 
\t }, 
 
\t dialogHandler: function(nickname){ 
 
\t \t Private.dialogChecker(nickname) 
 
\t }, 
 
\t dialogSize: function(evt){ 
 
\t \t evt.next().toggle() 
 
\t }, 
 
    events: function() { 
 
    \t $("#create").on("click", function(){ 
 
     \t Private.openDialog() 
 
     }) 
 
     $(document).on("click", ".close-private-dialog", function(){ 
 
\t \t \t Private.closeDialog($(this)) 
 
     }) 
 
     $(document).on("click", ".private-title", function(){ 
 
\t \t \t Private.dialogSize($(this)) 
 
     }) 
 
    }, 
 
    init: function() { 
 
     Private.events() 
 
    }, 
 
    openDialog: function(){ 
 
     \t var nick = "test" + Private.count; 
 
     
 
     Private.dialogChecker(nick) 
 
     
 
     Private.count++; 
 
    }, 
 
\t removeFromArray: function(nickname){ 
 
\t \t if(Private.windowsOpen.indexOf(nickname) !== -1){ 
 
\t \t \t var index = Private.windowsOpen.indexOf(nickname); 
 
\t \t \t Private.windowsOpen.splice(index, 1) 
 
\t \t } 
 
\t } 
 
} 
 

 
Private.init()
#main-container { 
 
    position: absolute; 
 
    border: 1px solid red; 
 
    top: 0; 
 
    right: 0; 
 
    bottom: 0; 
 
    left: 0; 
 
} 
 

 
#private-dialog { 
 
    position: absolute; 
 
    bottom: 0; 
 
    right: 0; 
 
} 
 

 
.private-section { 
 
    float: right; 
 
    width: 7em; 
 
    margin-left: 2px; 
 
} 
 

 
.private-title { 
 
    background-color: #e01859; 
 
    color: #FFF; 
 
    padding: .5rem; 
 
    border-radius: .3rem .3rem 0 0; 
 
    box-shadow: 0px -2px 1px rgba(16, 13, 14, 0.39); 
 
    cursor: pointer; 
 
} 
 

 
.private-init { 
 
    background-color: #FFF; 
 
    height: 5em; 
 
    padding: 1em; 
 
} 
 

 
.private-section > .icon-cancel:before { 
 
    float: right; 
 
    margin-top: 2px; 
 
} 
 

 
.close-private-dialog { 
 
    float: right; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="main-container"> 
 
    Click couple times on "create" button 
 
    <button id="create"> 
 
     create 
 
    </button> 
 
    <div id="private-dialog"> 
 
    </div> 
 
</div>

回答

0

display: inline-block.private-section更换float: right并使用prepend()而非append(),如果你想保持相同的顺序添加新时弹出窗口。

底部还有一个区域,当它们全部被折叠时仍然需要处理,但这是基本的想法。

Private = { 
 
\t count: 0, 
 
\t windowsOpen: [], 
 
\t closeDialog: function(evt){ 
 
\t \t evt.parent().parent().remove() 
 
\t \t Private.removeFromArray(evt.parent().text()) 
 
\t }, 
 
    createDialog: function(nickname) { 
 
     var dialog = $("#private-dialog"), 
 
\t \t \t dialogCloseButton = $("<span />", { 
 
\t \t \t \t class: "ct icon-cancel close-private-dialog" 
 
\t \t \t }), 
 
      dialogHeader = $("<div />", { 
 
       class: "private-section" 
 
      }), 
 
      dialogInit = $("<div />", { 
 
       class: "private-init", 
 
       html: "Here will come the messages" 
 
      }), 
 
      dialogTitle = $("<div />", { 
 
       class: "private-title", 
 
       html: nickname 
 
      }); 
 

 
\t \t dialogTitle.append(dialogCloseButton) 
 
     dialogHeader.append(dialogTitle, dialogInit) 
 
     dialog.prepend(dialogHeader) 
 
    }, 
 
\t dialogChecker: function(nickname){ 
 
\t \t if(Private.windowsOpen.indexOf(nickname) === -1){ 
 
\t \t \t Private.windowsOpen.push(nickname) 
 
\t \t \t Private.createDialog(nickname) 
 
\t \t } else { 
 
\t \t \t console.log("this dialog is already open") 
 
\t \t } 
 
\t }, 
 
\t dialogHandler: function(nickname){ 
 
\t \t Private.dialogChecker(nickname) 
 
\t }, 
 
\t dialogSize: function(evt){ 
 
\t \t evt.next().toggle() 
 
\t }, 
 
    events: function() { 
 
    \t $("#create").on("click", function(){ 
 
     \t Private.openDialog() 
 
     }) 
 
     $(document).on("click", ".close-private-dialog", function(){ 
 
\t \t \t Private.closeDialog($(this)) 
 
     }) 
 
     $(document).on("click", ".private-title", function(){ 
 
\t \t \t Private.dialogSize($(this)) 
 
     }) 
 
    }, 
 
    init: function() { 
 
     Private.events() 
 
    }, 
 
    openDialog: function(){ 
 
     \t var nick = "test" + Private.count; 
 
     
 
     Private.dialogChecker(nick) 
 
     
 
     Private.count++; 
 
    }, 
 
\t removeFromArray: function(nickname){ 
 
\t \t if(Private.windowsOpen.indexOf(nickname) !== -1){ 
 
\t \t \t var index = Private.windowsOpen.indexOf(nickname); 
 
\t \t \t Private.windowsOpen.splice(index, 1) 
 
\t \t } 
 
\t } 
 
} 
 

 
Private.init()
#main-container { 
 
    position: absolute; 
 
    border: 1px solid red; 
 
    top: 0; 
 
    right: 0; 
 
    bottom: 0; 
 
    left: 0; 
 
} 
 

 
#private-dialog { 
 
    position: absolute; 
 
    bottom: 0; 
 
    right: 0; 
 
} 
 

 
.private-section { 
 
    display: inline-block; 
 
    width: 7em; 
 
    margin-left: 2px; 
 
} 
 

 
.private-title { 
 
    background-color: #e01859; 
 
    color: #FFF; 
 
    padding: .5rem; 
 
    border-radius: .3rem .3rem 0 0; 
 
    box-shadow: 0px -2px 1px rgba(16, 13, 14, 0.39); 
 
    cursor: pointer; 
 
} 
 

 
.private-init { 
 
    background-color: #FFF; 
 
    height: 5em; 
 
    padding: 1em; 
 
} 
 

 
.private-section > .icon-cancel:before { 
 
    float: right; 
 
    margin-top: 2px; 
 
} 
 

 
.close-private-dialog { 
 
    float: right; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="main-container"> 
 
    Click couple times on "create" button 
 
    <button id="create"> 
 
     create 
 
    </button> 
 
    <div id="private-dialog"> 
 
    </div> 
 
</div>