【发布时间】:2018-08-03 15:15:48
【问题描述】:
问题
我有一个图像滑块,问题是,预览图像上的单击事件在拖动后被触发。 我在this video展示了它
假定行为
点击事件应该只在用户没有预先拖动的情况下触发。
代码
isGrabbing: boolean = false;
startX: number;
startXPerc: number;
translateX: number = 0;
diffPerc: number;
@ViewChild('slider') slider;
onMouseDown(e: MouseEvent): void {
const pageX = e.pageX;
this.isGrabbing = true;
this.startX = pageX - this.slider.nativeElement.offsetLeft;
this.startXPerc = this.translateX;
}
onMouseUp(e: MouseEvent): void {
this.isGrabbing = false;
}
onMouseMove(pageX: number): void {
if (!this.isGrabbing) return;
const x = pageX - this.slider.nativeElement.offsetLeft;
const diff = this.startX - x;
this.diffPerc = 100 * diff / this.slider.nativeElement.offsetWidth;
this.translateX = this.startXPerc - this.diffPerc;
}
get translateXValue(): string {
return `translateX(${this.translateX}%)`
}
onSmallItemClick(i: number): void {
// this line should only be triggered
// if the user did not drag beforehand
this.animate(i * -100);
}
HTML:
<div
class="small-slider-container"
(mousedown)="onMouseDown($event)"
(mousemove)="onMouseMove($event)"
(mouseup)="onMouseUp($event)"
#slider
>
<div
class="small-slider"
[style.transform]="smallTranslateXValue"
[class.grabbing]="smallSliderGrabbing"
[class.grab]="!smallSliderGrabbing"
>
<div
class="item"
*ngFor="let i of images; let j = index"
[style.left]="j * 10 + '%'"
(click)="onSmallItemClick(j)"
>
<div class="content">
<img src="{{ i }}">
</div>
</div>
</div>
</div>
【问题讨论】:
标签: javascript html angular draggable dom-events