ÖNSÖZ: Hem ios hem de android ortamları ile uyum sağlandıktan sonra bu çözüm tamamen yeniden ifade edildi; Aşağıdaki yorumlar artık geçerli olmayabilir; herhangi bir geri bildirim açığız. iyonik $ionicScrollDelegate
hizmetiyle bir angularjs tapDetector
direktifini birleştirerek:
EVET, yatay kaydırma yaptığınızda kaydırma gelen uygulama içeriği engellemek için bir yol yoktur.
Ayrıca (mousedown
/touchstart
mousemove
/touchmove
, mouseup
/touchend
) çok hızlı dom etkinlik tespit kullanılarak tokatlamak tespit etmek gerekir; , kaydırma işlemi tamamlandıktan sonra $ionicGesture
olay dinleyicisinin tokatlamayı algılaması nedeniyle gereklidir: İyonik kaydırma işlemi amacımız için yavaşlatmaktır.
<body ng-controller="MyCtrl" tap-detector>
Ve burada direktif kodudur:
tapDetector
direktif şöyle gövde üzerine yerleştirilir
.directive('tapDetector',function($ionicGesture,$ionicScrollDelegate){
return{
restrict:'EA',
link:function(scope,element){
var startX,startY,isDown=false;
element.bind("mousedown touchstart", function(e){
e=(e.touches)?e.touches[0]:e;//e.touches[0] is for ios
startX = e.clientX;
startY = e.clientY;
isDown=true;
//console.log("mousedown",startX,startY);
});
element.bind("mousemove touchmove", function(e){
e=(e.touches)?e.touches[0]:e;//e.touches[0] is for ios
if(isDown){
var deltaX = Math.abs(e.clientX - startX);
var deltaY = Math.abs(e.clientY - startY);
if(deltaX > deltaY) {
//console.log("horizontal move");
$ionicScrollDelegate.$getByHandle('mainScroll').freezeScroll(true);
}
}
});
element.bind("mouseup touchend", function(e){
isDown=false;
$ionicScrollDelegate.$getByHandle('mainScroll').freezeScroll(false);
//console.log("mouseup touchend");
});
}
}
})
ekrana dokunduğunuzda (hazırlık tokatlamak için), dokunmatik koordinatlar ayarlanır (startX, startY) ve isDown
, true olarak ayarlanır.
Kaydırmaya başladığınızda, kaydırmanın yatay mı yoksa dikey mi olduğunu belirlemeliyiz. Biz yatay kaydırma hareketiyle sadece ilgilenen:
var deltaX = Math.abs(e.clientX - startX);
var deltaY = Math.abs(e.clientY - startY);
deltaX
orijinal X ve cari X arasındaki fark (delta) 'dir; deltaY
, orijinal Y ile geçerli Y arasındaki farktır (delta);
if (deltaX > deltaY)
Yatay bir kaydırmaya sahibiz!
Şimdi tokatlamak tüm bu dinamik kaydırma önlemek için yapılması gereken bir bırakılır, yeterince hızlı algılandı:
$ionicScrollDelegate.$getByHandle('mainScroll').freezeScroll(true);
ve HTML: <ion-content delegate-handle="mainScroll">
kaydırma sonra tamamla, dondurulmalı mıyız (çözülmeli?) Kaydırma:
element.bind("mouseup touchend", function(e){
isDown=false;
$ionicScrollDelegate.$getByHandle('mainScroll').freezeScroll(false);
});
Bu Neredeyse unuttum
iPad 2 ve Android Galaxy S4 ile test edilmiştir: Burada SMR bir working pen (nezaket) 'dir
yeniden formüle kontrol ediniz cevap ver ve geri bildirim sağladığında ... – Manube
@Manube özür dilerim, artık bunu kontrol etme yolum/zamanım yok, şimdi bile iyonik kullanmam, toplumun onunla başa çıkmasına izin verme, oldukça az ilgili insan var. – Anri
Tamam, sorun değil, cevabınız için teşekkürler. – Manube