Pergunta

É possível alterar o posicionamento do avatar com api dnd dojo do kit de ferramentas? No momento, ao arrastar, o avatar do arrastado aparece de itens para a direita e abaixo do cursor do mouse. Eu quero que seja na mesma posição que o cursor do mouse. Corri alguns testes de usabilidade no meu aplicativo, ea maioria das pessoas parecem tentar para tentar arrastar o avatar para a área de queda, ao invés de mover o cursor sobre a área de queda. Qualquer entrada seria bom. Obrigado!

Foi útil?

Solução

Desculpe, não é possível por razões técnicas.

UPDATE: por demandas populares estes são motivos técnicos:

  • Quando você tem um certo nó sob o mouse, o nó recebe todos os eventos do mouse.
  • O mouse eventos bolha na cadeia pai.
  • Agora imagine que você mover este nó com o mouse -. Este nó seria sempre obter todos os eventos do mouse
  • Isso significa que qualquer outro nó, por exemplo, um alvo pode não obter eventos do mouse a menos que seja um pai do nó movido. Normalmente, este não é o caso.

Mas eu sei que outras pessoas podem fazê-lo! Deve ser possível! Sim, é possível ... em princípio:

  • registrar Vamos todos nós de destino.
  • Deixe-captura eventos de movimentação do mouse relevantes diretamente sobre o pai de nível superior (o documento).
  • Quando detectar uma operação de arrastar, vamos fazer o seguinte:
    1. geometria Calcular (caixas delimitadoras) de todos os alvos.
    2. Em cada movimento do mouse permite verificar se os atuais sobreposições posição do mouse com um alvo. Os pontos de bónus para um estudante de "A +":. detectar sobreposições com outros nós, por exemplo, quando um alvo é parcialmente obscurecem por razões estéticas, e processar esta situação correctamente
    3. Se as atuais sobreposições posição do mouse com um alvo, vamos iniciar "drop é possível" ações, por exemplo, mostrar algumas sugestões para que o usuário final sabe que ela pode cair agora.

Por Dojo não faz isso? Por uma série de razões técnicas (finalmente chegamos lá!):

  • cálculos de geometria de um nó são notoriamente de buggy na maioria dos navegadores. Assim que as tabelas estão envolvidas, ou qualquer outro meio não-triviais de colocação, você não pode ser 100% de certeza que a caixa delimitadora está correto.
  • cálculos de geometria é uma operação cara, e nós temos que fazê-lo pelo menos uma vez em cada operação de arrastar para todos os alvos assumindo que nenhuma mudança pode ser feita durante a operação de arrastar (nem sempre o caso). Um navegador pode refluir nós por muitas razões ? pode mover / redimensionar as metas existentes, por isso temos de estar vigilantes.
  • Normalmente as caixas calculados são mantidos em uma lista ? verificando a lista de interseções é que O (n) (linear) ? não escala bem como o número de alvos crescer.
  • Todos manipuladores de eventos rato deve ser rápido, caso contrário, um navegador rato evento facilidade de manipulação pode ser "quebrado", levando a efeitos colaterais imprevisíveis. Veja os pontos anteriores por razões por que o processamento de eventos do mouse pode ser lento.
  • Melhorar na busca linear é possível, por exemplo, pode ser usado em 2D árvores espaciais, mas leva a mais (muito mais) código JavaScript ? mais coisas para download no lado do cliente ? geralmente não vale a pena.

Como eu sei disso? Porque Dojo costumava ter esse tipo de drag'n'drop em versões anteriores, e temos problemas combate doentes e cansados ??que eu descrevi acima. Qualquer melhoria foi uma batalha difícil, o que aumentou o tamanho do código. Finalmente decidimos contra reinventar e replicar mecanismos já construídos em um browser. Um navegador não faz praticamente o mesmo trabalho:. Calcula geometria de nós, encontra o nó subjacente, e despacha um evento movimento do mouse adequadamente

A implementação atual não usar eventos mova o mouse e não calcular a geometria. Em vez disso, conta com mouse sobre / out eventos detectados por alvos depois de uma tragada foi iniciado. Ele funciona de forma confiável e escamas bem.

Outra rugas nessa história: alvos Dojo trata como recipientes - um caso de uso muito comum (carrinhos de compras, reorganizar itens, editar hierarquias). Linear recipientes e árvores genéricos são implementados no momento, recipientes personalizados são possíveis. Ao arrastar e soltar você pode ver e queda arrastou itens em uma posição adequada dentro de um recipiente de destino, por exemplo, inserindo-os entre os itens existentes. A implementação desse recurso usando cálculos geométricos e cheques seria proibitivamente caro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top