1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- /**
- * fastclick(only for radio,checkbox)
- */
- (function($, window, name) {
- if (!$.os.android && !$.os.ios) { //目前仅识别android和ios
- return;
- }
- if (window.FastClick) {
- return;
- }
- var handle = function(event, target) {
- if (target.tagName === 'LABEL') {
- if (target.parentNode) {
- target = target.parentNode.querySelector('input');
- }
- }
- if (target && (target.type === 'radio' || target.type === 'checkbox')) {
- if (!target.disabled) { //disabled
- return target;
- }
- }
- return false;
- };
- $.registerTarget({
- name: name,
- index: 40,
- handle: handle,
- target: false
- });
- var dispatchEvent = function(event) {
- var targetElement = $.targets.click;
- if (targetElement) {
- var clickEvent, touch;
- // On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect
- if (document.activeElement && document.activeElement !== targetElement) {
- document.activeElement.blur();
- }
- touch = event.detail.gesture.changedTouches[0];
- // Synthesise a click event, with an extra attribute so it can be tracked
- clickEvent = document.createEvent('MouseEvents');
- clickEvent.initMouseEvent('click', true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);
- clickEvent.forwardedTouchEvent = true;
- targetElement.dispatchEvent(clickEvent);
- event.detail && event.detail.gesture.preventDefault();
- }
- };
- window.addEventListener('tap', dispatchEvent);
- window.addEventListener('doubletap', dispatchEvent);
- //捕获
- window.addEventListener('click', function(event) {
- if ($.targets.click) {
- if (!event.forwardedTouchEvent) { //stop click
- if (event.stopImmediatePropagation) {
- event.stopImmediatePropagation();
- } else {
- // Part of the hack for browsers that don't support Event#stopImmediatePropagation
- event.propagationStopped = true;
- }
- event.stopPropagation();
- event.preventDefault();
- return false;
- }
- }
- }, true);
- })(mui, window, 'click');
|