Eu usei este plugin incrível com jquery.draggable para o diagrama panorâmico / zoom com nós arrastáveis,
mas após a última atualização do Chrome, os nós tornam-se impossíveis de arrastar.
Poucas investigações mostraram que o Chrome mudou algo com seu evento pointerdown,
então agora o plugin panzoom responde pelo evento pointerdown do nó filho antes de ser disparado o evento mousedown.
Panzoom suprime o evento pointerdown e, por alguma razão, não há evento mousedown depois disso, portanto, o arrastamento não começa.
jquery.panzoom.js v3.2.2
jquery 3.1.0 ou v1.11.3
jqueryui 1.12.0 ou 1.10.3
Chrome 55.0.2883.75 (64 bits) Ubuntu 16.04
Aqui está uma demonstração
http://codepen.io/yurigor/pen/yVjeGB
Eu adicionei a opção 'ignoreChildrensEvents' para corrigir este problema
Não tenho certeza se devo fazer uma solicitação pull com essas alterações.
Estou tendo o mesmo problema, o Chrome v55. Tenho uma janela arrastável e quero obter eventos do mouse para crianças. O que você fez para consertar isso? você tem uma filial com a mudança, estou preso por enquanto.
encontrei seu branch e ele corrige meu problema muito bem. Obrigado YuriGor isso é maravilhoso
Feliz por ajudar!
Qualquer pessoa que também precise, aqui está um link direto:
https://github.com/YuriGor/jquery.panzoom/tree/ignoreChildrensEvents/dist
@timmywil , se você deseja mesclar minhas alterações, me ajude com o grunhido, por favor.
Eu começo o carregamento de fígado por
grunt watch:dev
mas não funciona.
Em http: // localhost : 35711 / eu tenho
{"tinylr":"Welcome","version":"0.2.1"}
e em
http: // localhost : 35711 / test / index.html
ou
http: // localhost : 35711 / demo / index.html
eu tenho
{"error":"not_found","reason":"no such route"}
Muito obrigado. esta correção não foi suficiente para mim, mas eu mesmo adicionei alguns para corrigi-lo para o meu caso. (tenho vários filhos aninhados, alguns deles devem ser ignorados e outros não)
@timmywil É possível lançar uma nova versão com esta opção?
Edit: Na verdade, tenho o mesmo problema que Romi45. 😞
Edição 2: uma opção para listar quais elementos ignorar seria útil, como:
ignoreChildEventsFrom: [".things-to-ignore1", ".things-to-ignore2"]
Edit 3: Acho que encontrei a solução no FAQ "Como faço os links funcionarem se eles estiverem dentro de um elemento Panzoom?".
o que faço é comentar o preventDefault na linha 969. preventDefault impedirá que o evento alcance seus filhos.
@akhnaz ,
Do meu entendimento, preventDefault
impedirá a ação padrão associada a um elemento (um filho ou o próprio elemento panzoom) e stopPropagation
impedirá que os eventos borbulhem em um elemento pai.
Há uma solução simples e elegante no FAQ:
$('.panzoom a').on('mousedown touchstart', function( e ) {
e.stopImmediatePropagation();
});
Isso não requer alterações na própria biblioteca.
Hi @ glen-84
Sim, preventDefault impedirá a ação padrão. Mas, também impedirá mouseDown do filho quando o ponteiroDown estiver sendo despachado e ouvido.
No Chrome 55, o pointerDown agora é despachado e o microsoft edge já implementa o pointerDown desde o início.
No meu caso, panzoom é ouvido em pointerDown e os filhos em mouseDown.
Aqui está o meu jsbin para isso:
@akhnaz ,
Você pode simplesmente ouvir pointerdown
no filho e interromper a propagação imediata ...
https://jsbin.com/sicapuledo/edit?html , js, console, saída
Oi,
Eu melhorei um pouco seu recurso. Eu anulo sua opção para um possível conjunto de classes. O objetivo é ignorar eventos apenas se os filhos tiverem uma das classes listadas. Claro, apenas definir o valor como verdadeiro funcionará conforme você o implementou.
Não tenho muito tempo para fazer o fork corretamente e fazer uma solicitação de pull. Por favor, inclua essa pequena melhoria e solicite um pull no repositório principal.
Aqui está o código atualizado de suas linhas de bifurcação 959:
if (!options.disablePan || !options.disableZoom) {
events[ str_start ] = function(e) {
if(options.ignoreChildrensEvents) {
if($.isArray(options.ignoreChildrensEvents)) {
if(options.ignoreChildrensEvents.find(function(c){return $(e.target).hasClass(c);})) {
return;
}
}
else if(e.target !== this){
return;
}
}
var touches;
/* rest of code */
A opção ignoreChildrensEvents pode ser definida como true, false ou ['child-class1', 'child-class2'].
Cumprimentos
libere uma versão mais recente que contém ignoreChildrensEvents
Comentários muito úteis
Feliz por ajudar!
Qualquer pessoa que também precise, aqui está um link direto:
https://github.com/YuriGor/jquery.panzoom/tree/ignoreChildrensEvents/dist
@timmywil , se você deseja mesclar minhas alterações, me ajude com o grunhido, por favor.
Eu começo o carregamento de fígado por
grunt watch:dev
mas não funciona.
Em http: // localhost : 35711 / eu tenho
{"tinylr":"Welcome","version":"0.2.1"}
e em
http: // localhost : 35711 / test / index.html
ou
http: // localhost : 35711 / demo / index.html
eu tenho
{"error":"not_found","reason":"no such route"}