我正在使用jquery-ui的帶有碰撞的自動填充框來在輸入的上方或下方顯示自動填充。我想要的是添加一個類到自動完成元素,如果檢測到碰撞,所以我可以自定義css一點,如果它高於vs下面。這似乎應該很簡單,但我似乎無法找到任何方法來實現它。jquery與碰撞的位置。檢測到碰撞時添加類
回答
更好的解決方案是在回調中使用第二個參數。 從jQueryUI的文檔:
第二提供了有關位置和兩元件的尺寸,以及它們的相對位置計算反饋。 target和element都具有這些屬性:元素,左,頂部,寬度和高度。此外,還有橫向,縱向和重要的,給你12個潛在的方向,如{horizontal:「center」,vertical:「left」,important:「horizontal」}。
,因爲它說,有一個水平和第二個參數,你可以用它來找出元素是否翻轉或不內垂直屬性。所以,你可能寫的是這樣的:
$("#someId").dialog({
position: {
my: 'left top',
at: 'right top',
collision: 'flip flip',
of: $('#' + someElementID),
using: function (obj,info) {
if (info.vertical != "top") {
$(this).addClass("flipped");
} else {
$(this).removeClass("flipped");
}
if (info.horizontal != "left") {
$(this).addClass("flipped");
} else {
$(this).removeClass("flipped");
}
$(this).css({
left: obj.left + 'px',
top: obj.top + 'px'
});
}
},
,您應該使用using
回調position
這裏是一個可能的解決方案,假設你打開一個對話框......
$("#someId").dialog({
position: {
my: 'left top',
at: 'right top',
collision: 'flip flip',
of: $('#' + someElementID),
using: function (obj) {
if (obj.left < $('#' + someElementID).offset().left) {
$(this).addClass("flipped");
} else {
$(this).removeClass("flipped");
}
//decide if dialog is being opened flipped from buttom to top
if ((obj.top + 50) < $('#' + someElementID).offset().top) {
$(this).addClass("flipped_top");
} else {
$(this).removeClass("flipped_top");
}
$(this).css({
left: obj.left + 'px',
top: obj.top + 'px'
});
}
},
...
而是添加/刪除類來$(this)
這是對話本身,你可以添加/刪除類到其他元素...
什麼是有些元素? –
任何其他元素,你想反映的事實,對話框翻轉(不能想到一個場景atm) – Daniel
而不是使用2級的解決方案在這裏mentionned,我喜歡創造出使用默認的自定義翻轉處理程序,並檢測是否有改變。
這裏是我如何做它:
$.ui.position.custom = {
left: function(position, data) {
var initPos = position.left;
$.ui.position.flip.left(position, data);
if (initPos != position.left) {
data.elem.addClass('tooltipFlipLeft');
} else {
data.elem.removeClass('tooltipFlipLeft');
}
},
top: function(position, data) {
var initPos = position.top;
$.ui.position.flip.top(position, data);
if (initPos != position.top) {
data.elem.addClass('tooltipFlipTop');
} else {
data.elem.removeClass('tooltipFlipTop');
}
}
};
然後我使用位置功能時使用它:
me.position({
of: opener,
my: 'right bottom',
at: 'center top',
collision: 'custom'
});
這裏唯一的相關行是一個與碰撞。
這是唯一的工作解決方案。除此之外,似乎還有一種擴展現有邏輯的好方法。用這個! –
這個答案對我來說非常合適。這是我可以開始工作的唯一解決方案,您可以知道翻蓋發生的方向。謝謝! – corbin
- 1. Unity碰撞檢測 - 添加碰撞時的GUI分數?
- 2. 碰撞檢測
- 3. 碰撞檢測
- 4. 碰撞檢測
- 5. 檢測正方形的哪一側與碰撞檢測碰撞
- 6. 碰撞檢測和碰撞響應
- 7. div的jquery碰撞檢測
- 8. jQuery中的碰撞檢測
- 9. Android位圖:碰撞檢測
- 10. jQuery假碰撞檢測
- 11. 碰撞檢測和類
- 12. ActionScript與Java檢測碰撞
- 13. Javascript碰撞檢測
- 14. Java。碰撞檢測
- 15. Pacman碰撞檢測
- 16. Java碰撞檢測
- 17. SDL碰撞檢測
- 18. Pygame碰撞檢測
- 19. XNA碰撞檢測
- 20. XNA碰撞檢測
- 21. Slick2D碰撞檢測
- 22. 檢測牆碰撞
- 23. 碰撞檢測Swift
- 24. Cocos2D碰撞檢測
- 25. 碰撞檢測(CGRectIntersectRect)
- 26. 碰撞檢測Javascript
- 27. Box2D碰撞檢測?
- 28. 檢測碰撞JavaScript
- 29. BabylonJS:碰撞檢測
- 30. SpriteKit碰撞檢測
我在文檔中閱讀這個,但當我嘗試它,我沒有得到第二個在我使用回調的論點。你知道這是在更新版本的jQuery UI中添加的東西嗎?不幸的是,我們現在被困在相對古老的1.8.2。 – Elezar
我不確定,但我想我已經用1.8.12或1.10.3測試了它。但是,它看起來並不像是一個小版本的改動! –
不適合我。當翻轉它仍然遇到其他情況.. –