Q:uiscrollview中有多个uiwebview,左右滑动会切换uiwebview,
其中一个 uiwebview 中内嵌一个css写的listbox,listbox中有多张图片,左右滑动图片会切换。
如何区别这2种滑动,在listbox种滑动时不让uiscrollview也滑动,在webpage的其他地方左右滑动让uiscroolview做切换。
A:通过引入gestureRegnize来判断touch 点,用js获得uiwebview 处的元素,此处通过元素名称IMG及其源src来判断touch点是否落在listbox中,这个不是很好的办法,但暂时就想到这个方法。
NSString *js = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).tagName", pt.x, pt.y];
NSString * tagName = [webview stringByEvaluatingJavaScriptFromString:js];
NSLog(@"tagName:%@",tagName);
if([tagName isEqualToString:@"IMG"]){
NSString *src = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).src", pt.x, pt.y];
NSString * srcName = [webview stringByEvaluatingJavaScriptFromString:src];
NSLog(@"srcName:%@",srcName);
}
通过在或不在listbox,让scrollview的scroll功能enable或disable
2014-11-18
补充:
通过调用js来获得区域大小,并判断是否在其中
NSString *scriptCode = @"(function(){ \
var e=document.getElementById('%@'); \
var l = 0; \
var t = 0; \
var w = e.offsetWidth; \
var h = e.offsetHeight; \
while (e){ \
l += (e.offsetLeft-e.scrollLeft+e.clientLeft); \
t += (e.offsetTop-e.scrollTop+e.clientTop); \
e = e.offsetParent \
} \
return l+':'+t+':'+w+':'+h; \
})();";
另一个js,判断父元素是否在其中
NSString *scriptCode = @"(function(){ \
var clickedElement=document.elementFromPoint(%f, %f); \
var targetElement=document.getElementById('%@'); \
var targetElement2=document.getElementById('%@'); \
var e=clickedElement; \
while (e){ \
if(e==targetElement){ \
return 1; \
} \
if(e==targetElement2){ \
return 1; \
} \
e = e.offsetParent \
} \
return 0; \
})();";
NSString* jsScript=[NSString stringWithFormat:scriptCode, pt.x, pt.y,@"myCarousel",@"myCarousel_2"];
NSString*jsRet=[webview stringByEvaluatingJavaScriptFromString:jsScript];