Gostaria de saber se alguém teve um problema com o evento de clique sendo disparado após arrastar e soltar?
Meu contêiner é uma lista enorme de imagens embrulhadas com links para uma página dedicada.
Às vezes, quando o arrastar e soltar é iniciado na parte superior da imagem, o evento de clique é disparado ao soltar o mouse.
Existe uma maneira fácil de evitar que isso aconteça?
Eu estava pensando em adicionar uma classe sem clique ao contêiner e, em seguida, adicionar um click eventListener a todos os filhos que verificará se o pai tem a classe sem clique e interromperá a propagação do evento se o mouse-up for acionado dentro de 100 ms após o estado arrastável terminou.
Atualmente, o e.preventDefault () comentado devido a um problema relatado anteriormente (https://github.com/bfwg/angular2-drag-scroll/issues/16) está relacionado a esse comportamento indesejado. No entanto, uma solução melhor seria evitar o clique apenas se ele fosse iniciado imediatamente após a interrupção de um evento de arrastar .
@Sprauch
Obrigado por relatar este problema, gostaria de fazer um PR para este bug?
Nah, ainda sou um pouco novo nisso. Começou a desenvolver no Angular há menos de 18 meses e se juntou ao GitHub ontem;)
Não se preocupe, tentarei consertá-lo quando tiver tempo.
Ei pessoal, eu também tenho esse problema, há algum progresso com uma correção / uma solução alternativa?
Olá @ stuart-clark-45
Estou trabalhando no lançamento da v2.0, espero que esse problema desapareça até então. Se não, voltarei e consertarei.
@bfwg isso é ótimo, muito obrigado, pequena biblioteca realmente boa além deste bug. Você tem uma ideia de quando poderá lançar a v2.0?
@ stuart-clark-45
Não há problema, o progresso do 2.0 pode ser rastreado em # 66 # 68. Depois de um pouco de investigação, o problema é mais difícil de consertar do que eu esperava. Vou tentar criar um novo PR para corrigi-lo logo após o lançamento do 2.0. Desculpe pelo atraso.
@bfwg Impressionante parece que você está bem no topo das coisas, muito obrigado: thumbsup:
Não sei se isso está relacionado, mas não consigo selecionar texto em nenhum dos meus aplicativos angulares usando o mouse para baixo e destacando o texto. Isso acontece depois de importar o DragScrollModule. Eu fui para a página de demonstração e verifiquei que a seleção de texto também não está funcionando naquela página.
A única maneira de selecionar o texto agora, em qualquer lugar da página, é usando um clique duplo do mouse e o teclado para destacar o texto ...
Existe algo que pode ser feito temporariamente para substituir esse comportamento?
Resolvi isso usando (reachLeftBound) para descobrir se ele estava sendo arrastado para evitar o clique.
Adicione (atingeLeftBound) ao seu dragScroll
<div dragScroll [scrollbar-hidden]="true" (reachesLeftBound)="leftBoundStat($event)">
Adicione eventos de mouse ao seu div etc.
<div (mousedown)="down()" (click)="fire()">
Em seu component.ts adicione o seguinte
click = false;
leftBoundStat(event: any): void {
if (this.click) {
this.click = false;
}
}
down() {
console.log('Mouse down');
window.setTimeout(this.startCheck(), 1000);
}
fire() {
if (this.click) {
console.log('Fire the action');
}
}
startCheck() {
this.click = true;
}
Isso evitará o clique, se for para ser arrastado.
A propósito, a barra de rolagem oculta ainda não funciona para mim. Se alguém souber como fazer funcionar, gostaria de receber uma linha :)
Olá @STIKO , pode fornecer-me um link de êmbolo para que eu possa ver mais de perto?
Não consegui fazer funcionar no plunker, pois nunca usei antes.
Eu importei em app.module.ts
import {DragScrollModule} from 'ngx-drag-scroll';
Em seguida, adicionei-o a @NgModule
importações do mesmo arquivo
imports: [DragScrollModule];
Estou assumindo que o acima está correto, pois o arrasto está funcionando.
Agora no meu componente
export class Example implements OnInit {
@Input() 'scrollbar-hidden': boolean;
}
Não tenho certeza se @Input()
é necessário. finalmente o modelo
<div dragScroll scrollbar-hidden="true"
drag-scroll="true"
drag-scroll-y-disabled="true"
snap-disabled="true">
<div style="display: inline">
<img src='http://via.placeholder.com/310x471'/>
</div>
<div style="display: inline">
<img src='http://via.placeholder.com/310x471'/>
</div>
<div style="display: inline">
<img src='http://via.placeholder.com/310x471'/>
</div>
</div>
</div>
Tudo funciona bem, exceto quando eu rolar, a barra de rolagem ainda é exibida, embora eu tenha definido desativar como verdadeiro
Você pode tentar remover o invólucro div para a tag img e dar a eles uma largura e altura?
Algo como abaixo. Veja se isso resolve o problema para você.
@Component({
selector: 'my-app',
styles: [`
.image-cell: {
width: 310px;
height: 470px;
}
`]
template: `
<div>
<h2>Hello {{name}}</h2>
<div dragScroll
drag-scroll-y-disabled="true"
scrollbar-hidden="true"
snap-disabled="true" style="height: 470px; width: 310px;">
<img class="image-cell" src='http://via.placeholder.com/310x471'/>
<img class="image-cell" src='http://via.placeholder.com/310x471'/>
<img class="image-cell" src='http://via.placeholder.com/310x471'/>
</div>
</div>
`,
})