[Javascript] आयनिक बहु स्पर्श इवेंट को कैसे सक्षम करें


Answers

संदर्भ के लिए ईओनिक मंचों से स्टैंकुगो का उत्तर क्रॉसपोस्ट कर रहा है नीचे दिए गए सरल समाधान पूरी तरह से उनके विचार हैं, मैंने अभी थोड़ी सफाई कर ली है।

angular.module('xxxx').directive('multitouch', function () {
    return function(scope, element, attr) {
        element.on('touchstart', function() {
            scope.$apply(function() {
                scope.$eval(attr.multitouch);
            });
        });
    };
});

जैसे प्रयोग करें:

<div multitouch="handler()"></div>
Question

मैं एक साधारण ईओनिक ऐप विकसित कर रहा हूं, और ऐप का एक हिस्सा आपको एक बार में दो बटन दबाए जाने की आवश्यकता है मैंने इस तर्क को इस तरह बनाया है:

<!--yT stands for yourThumb, pT stands for partnersThumb -->


<a class="icon ion-qr-scanner lg-txt" on-hold="Global.thumbHoldManager('yT',true)" on-release="Global.thumbHoldManager('yT',false, true)"></a>

<a class="icon ion-qr-scanner lg-txt" on-hold="Global.thumbHoldManager('pT',true)" on-release="Global.thumbHoldManager('pT',false, true)"></a>

मेरे पास मेरे नियंत्रक पर एक विधि है जो इस ईवेंट का उपयोग करके मैंने बनाई गई एक सेवा का उपयोग कर रहा है I

var globalCtrl = function (clickHandler, $timeout) {
  var self = this;
  this.clickHandler = clickHandler;
  this.timeout = $timeout;
  this.readyState = clickHandler.ready;
  this.showInstruction = false;

  clickHandler.watchForReady();

};

globalCtrl.prototype.thumbHoldManager = function(which, what, up) {
    this.clickHandler.setClickState(which, what);
    var self = this;

    if (up) {
        this.clickHandler.stopWatching();
    }

    if (!this.readyState) {
        this.instruction = "Hold both thumbs in place to scan"
        if (!this.showInstruction) {
                this.showInstruction = true;
                self.timeout(function() {
                self.showInstruction = false;
            }, 5000)
        }
    }
};

globalCtrl.$inject = ['clickHandler', '$timeout'];

सेवा क्लिकहैंडलर एक एपीआई को एक निजी ऑब्जेक्ट के साथ उजागर करता है जिसका काम तब होता है जब एक बटन दबाया जाता है, और जब दोनों बटन एक नए यूआरएल पर नेविगेट करने के लिए दबाए जाते हैं।

.factory('clickHandler', [
    '$interval',
    '$rootScope',
    '$location',
    function($interval, $rootScope, $location) {

    // Service logic
    // ...

        var clickState = {
            yT: false,
            pT: false,
            ready: false,
            watching: false,
            watcher: false
        };

    // Public API here

        return {
            setClickState: function(which, what) {
                clickState[which] = what;
            },

            getClickState: function(which) {
                return clickState[which]
            },

            getReadyState: function() {
                return ((clickState.yT) && (clickState.pT));
            },

            watchForReady: function() {
                var self = this;
                clickState.watching = $interval(function() {
                    clickState.ready = self.getReadyState();
                },50);

                clickState.watcher = $rootScope.$watch(function() {
                    return clickState.ready
                }, function redirect(newValue) {
                    if (newValue) {
                        self.stopWatching();
                        $location.path('/scan');
                    }
                })
            },

            stopWatching: function() {
                if (clickState.watching) {
                    $interval.cancel(clickState.watching);
                    clickState.watcher();
                    clickState.watching = false;
                    clickState.watcher = false;

                }
            }

        };
    }
])

मुझे इस कोड के साथ कोई त्रुटि नहीं मिली है, सब कुछ काम करता है जैसा कि यह होना चाहिए, वॉचर्स को आयोजित होने वाली घटना पर पंजीकृत किया जाता है और रिलीज़ होने की घटना पर पंजीकरण रद्द नहीं होता है लेकिन मैं जो कुछ भी करता हूं, मैं अपने फोन को दोनों बटनों पर एक प्रेस का पता लगाने के लिए नहीं मिल सकता। यह हमेशा एक या दूसरे और मुझे नहीं पता कि क्यों मैं ब्राउज़र या एमुलेटर में इसका परीक्षण नहीं कर सकता क्योंकि बहु-स्पर्श समर्थित नहीं है और अगर मेरे पास कोई मल्टी-टच ट्रैकपैड नहीं है I




Links