uses touch event if available