Estou tentando usar a biblioteca de IU do diálogo jQuery para posicionar um diálogo próximo a algum texto quando ele é passado. A caixa de diálogo jQuery usa um parâmetro de posição que é medido a partir do canto superior esquerdo da janela de visualização atual (em outras palavras, [0, 0]
sempre o colocará no canto superior esquerdo da janela do navegador, independentemente de para onde você está rolando atualmente). No entanto, a única maneira que conheço de recuperar a localização é pelo elemento relativo à página INTEIRA.
O seguinte é o que tenho atualmente. position.top
é calculado para ser algo como 1200 ou mais, o que coloca o diálogo bem abaixo do resto do conteúdo da página.
$(".mytext").mouseover(function() {
position = $(this).position();
$("#dialog").dialog('option', 'position', [position.top, position.left]);
}
Como posso encontrar a posição correta?
Obrigado!
Respostas:
Confira alguns dos plug-ins jQuery para outras implementações de um diálogo. Cluetip parece ser um plug-in de estilo de caixa de diálogo / tooltip rico em recursos. A quarta demonstração soa semelhante ao que você está tentando fazer (embora eu veja que não tem a opção de posicionamento precisa que você está procurando).
fonte
Como alternativa, você pode usar o utilitário jQuery UI
Position
, por exemplofonte
dialog
:$('#dialog').dialog({ width: 300 /* insert your options */ }).dialog('widget').position({ my: 'left', at: 'right', of: $(this) });
at: 'top+50'
vez deat: 'top + 50'
$('dialog').dialog({ position: { my: 'left top', at: 'left+50 top+50'}, });
Graças a algumas respostas acima, eu experimentei e finalmente descobri que tudo que você precisa fazer é editar o atributo "posição" na definição do Diálogo Modal:
JQuery não teve problemas com o texto do "meio" para o valor "X" horizontal e minha caixa de diálogo apareceu no meio, 20px abaixo do topo.
Eu amo JQuery.
fonte
Depois de ler todas as respostas, isso finalmente funcionou para mim:
fonte
Levando o exemplo de Jaymin um passo adiante, eu vim com isso para posicionar um elemento jQuery ui-dialog acima do elemento que você acabou de clicar (pense em "balão de fala"):
Observe que eu "abro" o elemento ui-dialog antes de calcular os deslocamentos relativos de largura e altura. Isso ocorre porque jQuery não pode avaliar outerWidth () ou outerHeight () sem que o elemento ui-dialog apareça fisicamente na página.
Apenas certifique-se de definir 'modal' como false nas opções da caixa de diálogo e você estará OK.
fonte
myDialogX
emyDialogY
http://docs.jquery.com/UI/API/1.8/Dialog
Exemplo de diálogo fixo no canto superior esquerdo:
fonte
Verifique o seu
<!DOCTYPE html>
Eu percebi que se você perder o
<!DOCTYPE html>
do início do seu arquivo HTML, a caixa de diálogo é mostrada centralizada no conteúdo do documento, e não na janela, mesmo se você especificar a posição: {my: 'center', at: 'center' , de: janela}EX .: http://jsfiddle.net/npbx4561/ - Copie o conteúdo da janela de execução e remova o DocType. Salve como HTML e execute para ver o problema.
fonte
Para colocá-lo em cima do controle, você pode usar este código:
fonte
Posiciona uma caixa de diálogo logo abaixo de um elemento. Eu usei a função offset () apenas porque ela calcula a posição relativa ao canto superior esquerdo do navegador, mas a função position () calcula a posição relativa ao div pai ou iframe daquele pai do elemento.
fonte
em vez de fazer jquery puro, eu faria:
Se eu estou entendendo sua pergunta corretamente, o código que você tem está posicionando o diálogo como se a página não tivesse rolagem, mas você quer levar a rolagem em consideração. meu código deve fazer isso.
fonte
Esta página mostra como determinar o deslocamento de rolagem. O jQuery pode ter uma funcionalidade semelhante, mas não consegui encontrar. Usando a função getScrollXY mostrada na página, você deve ser capaz de subtrair as coordenadas xey dos resultados .position ().
fonte
um pouco tarde, mas você pode fazer isso agora usando $ j (object) .offset (). left e .top de acordo.
fonte
Não acho que o balão de fala esteja certo. Eu ajustei um pouco para que funcionasse e o item fosse aberto logo abaixo do link.
fonte
Para fixar a posição central, eu uso:
fonte
Aqui está o código .., como posicionar a caixa de diálogo jQuery UI no centro ......
fonte
fonte
você pode usar
$(this).offset()
, a posição está relacionada ao paifonte
Tentei todas as soluções propostas, mas elas não funcionam porque a caixa de diálogo não faz parte do documento principal e terá sua própria camada (mas esse é meu palpite).
$("#dialog").dialog("option", "position", 'top')
$(dialog).dialog("open");
Em seguida, obtenha o xey da caixa de diálogo exibida (nenhum outro nó do documento!)
var xcoord = $(dialog).position().left + ADD_MODIFIER_FOR_X_HERE;
var ycoord= $(dialog).position().top + ADD_MODIFIER_FOR_Y_HERE;
$(dialog).dialog('option', 'position', [xcoord , ycoord]);
Desta forma, as coordenadas são da caixa de diálogo e não do documento e a posição é alterada de acordo com a camada da caixa de diálogo.
fonte
Tentei de várias maneiras fazer com que meu diálogo ficasse centralizado na página e vi que o código:
$("#dialog").dialog("option", "position", 'top')
nunca mude a posição da caixa de diálogo quando ela foi criada.
Em vez de, eu altero o nível do seletor para obter todo o diálogo.
$("#dialog").parent()
<- Este é o objeto pai que a função dialog () cria no DOM, isso ocorre porque o seletor $ ("# dialog") não aplica os atributos, superior, esquerdo.Para centralizar minha caixa de diálogo, uso o jQuery-Client-Centering-Plugin
$ ("# diálogo"). parent (). centerInClient ();
fonte
as soluções acima são verdadeiras ... mas a caixa de diálogo da IU não mantém a posição após a janela ser redimensionada. o código abaixo faz isso
fonte
Você pode definir a posição superior no estilo para exibição no centro, viu que o código:
.ui-dialog {top: 100px! important;}
Este estilo deve mostrar a caixa de diálogo 100px abaixo do topo.
fonte