Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας παιδιά.

 

Έχω φτιάξει μια εφαρμογή για android με html+js και έχω φτιάξει επίσης και ένα website στο οποίο μπορείς να δοκιμάσεις την εφαρμογή (μιας που είναι html).

 

Ας μπω στο κυρίως θέμα όμως...

Έχω ένα div στο οποίο κάνω .load() (jquery) ένα ολόκληρο αρχείο html (μαζί με τα παρελκώμενα του).

Αυτό το html αρχείο είναι η εφαρμογή.

Όταν ο χρήστης πατήσει σε κάποιο άλλο κουμπί του site από το navigation bar, τότε κάνω .empty το div που εμφανίζει την εφαρμογή αλλά τα setTimeout() από πίσω τρέχουν κανονικά και από ότι δοκίμασα δεν μπορώ να παρέμβω μέσα από το site και να τα κάνω clearTimeout()...

 

Ξέρει κανείς μήπως κάποιον τρόπο;

 

Ελπίζω να μην σας μπέρδεψα (το συνηθίζω αυτό :P)

Δημοσ.
...και από ότι δοκίμασα δεν μπορώ να παρέμβω μέσα από το site και να τα κάνω clearTimeout()...

 

Πως το δοκίμασες; Κώδιξ;

Δημοσ.

Η μεταβλητή που καλεί το το setTimeout είναι η counter...

Έτσι πατώντας ένα οποιδήποτε κουμπί από τα υπόλοιπα της navbar δοκίμασα να τρέξω αυτό...

if(typeof(counter) != "undefined"){
   clearTimeout(counter);
}

Δε βάζω όλο τον κώδικα γιατί θα μπερδευτούμε χειρότερα... αν θέλεις ρίξε μια ματιά εδώ

 

Πάτα στο Play Game ... πάτα marathon μόλις φορτώσει... μετά πάτα σε οποιδήποτε άλλο κουμπί και στη συνέχεια ξανά Play Game...

 

Θα ξανατρέξει κανονικά η εφαρμογή αλλά ξαφνικά θα σου βγάλει ένα time is over που είναι το μήνυμα όταν τελειώνει ο χρόνος και αυτό γίνεται μέχρι να τελειώσουν οι ζωές (πρόκειται για παιχνίδι ερωτήσεων :P)

Δημοσ.

Δε βάζω όλο τον κώδικα γιατί θα μπερδευτούμε χειρότερα... αν θέλεις ρίξε μια ματιά εδώ

 

Δεν εχω chrome/safari και έφαγα πόρτα...

Δημοσ.

Χαχαχαχαχα χρησιμοποιώ sqlite για αυτό δε δουλεύει στους άλλους browsers να σου στείλω με pm τον κώδικα;

Δημοσ.

Ναι καταλαβα το προβλημα....Ε αμα δε δειξεις λιγο κωδικα δεεεεν....

Τα setTimeout που ειναι? Δεν ειναι μεσα στο html αρχειο που φορτωνεις με load?

Και γιατι δε μπορεις να τα πειραξεις?

 

Κολλησα με το παιχνιδι πλακα πλακα. Νικαω!!!

Δημοσ.

O javascript κώδικας του index.html

 

Μην ασχολείστε με τα σχόλια :P

$(document).ready(function(){
	var name = '';
	var number = '';
	
	var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
	var isSafari = /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor);
	
	
	function hideall(){
		if(typeof(counter) != "undefined"){
				clearTimeout(counter);
		}
		$('#home_div').hide();
		$('#home_div').animate({scrollTop: '0px'}, 1);
		$('#download').hide();
		$('#information').hide();
		$('#information').animate({scrollTop: '0px'}, 1);
		$('#instructions').hide();
		$('#instructions').animate({scrollTop: '0px'}, 1);
		$("#zoom_image_div").hide();
		$("#screenshots").hide();
		$('#screenshots').animate({scrollTop: '0px'}, 1);
		$("#screenshot_zoom_div").hide();
		$("#play_game").hide();
		$("#play_game").empty();
		$('#not_supported_browser').hide();
		$("#menu a").each(function(){
			if($(this).hasClass("active")){
				$(this).addClass('menu_links');
				$(this).removeClass("active");
			}
		});
		return false;
	}
	
	hideall();
	$('#home_div').show();
	$('#home_button').addClass('active');
	$('#home_button').removeClass('menu_links');
	
	$('#home_button').click(function(evt){
		if(!$(this).hasClass("active")){
			hideall();
			$('#home_div').show();
			evt.preventDefault();
			$(this).addClass('active');
			$(this).removeClass('menu_links');
			return false;
		}
	});
	
	$('#download_button').click(function(evt){
		if(!$(this).hasClass("active")){
			hideall();
			$('#download').show();
			evt.preventDefault();
			$(this).addClass('active');
			$(this).removeClass('menu_links');
		}
	});
	
	$('#information_button').click(function(evt){
		if(!$(this).hasClass("active")){
			hideall();
			$('#information').show();
			evt.preventDefault();
			$(this).addClass('active');
			$(this).removeClass('menu_links');
		}
	});
	
	$('#instructions_button').click(function(evt){
		if(!$(this).hasClass("active")){
			hideall();
			$('#instructions').show();
			evt.preventDefault();
			$(this).addClass('active');
			$(this).removeClass('menu_links');
		}
	});
	
	$('#play_button').click(function(evt){
		if(!$(this).hasClass("active")){
			hideall();
			if ((isChrome) || (isSafari)){
				$('#play_game').load("game/game.html"); 
				$('#play_game').show();
			}else{
				$('#not_supported_browser').show();
			}
			evt.preventDefault();
			$(this).addClass('active');
			$(this).removeClass('menu_links');
		}
	});
	
	$('#screenshots_button').click(function(evt){
		if(!$(this).hasClass("active")){
			hideall();
			$('#screenshots').show();
			evt.preventDefault();
			$(this).addClass('active');
			$(this).removeClass('menu_links');
		}
	});
});

και η συνάρτηση που καλεί το counter στο αρχείο που γίνεται .load()

function countdown(){
	$('#timer').css('width',timer + '%');
	if(timer<=0){
		if(game_type=="marathon"){
			lives--;
		}
		$('#time_is_up').show();
		//AndAud.playAudio(wrong_audio, $("input[name='mute_hidden']").val());
		if($("input[name='mute_hidden']").val() > 0){
			$("#wrong_sound").get(0).play();
		}
		clearTimeout(counter);
		setTimeout(doitagain,2000);
		return;
	}
	//Τι είδος παιχνιδιού είναι Marathon ή Time trial
	if(game_type=="marathon"){
		if(c_answers < 10){
			timer -= (100/10); //10 δευτερόλεπτα
		}else if(c_answers >= 10 && c_answers < 20){
			timer -= (100/9); //9 δευτερόλεπτα
		}else if(c_answers >= 20 && c_answers < 30){
			timer -= (100/8); //8 δευτερόλεπτα
		}else if(c_answers >= 30 && c_answers < 40){
			timer -= (100/7); //7 δευτερόλεπτα
		}else if(c_answers >= 40 && c_answers < 50){
			timer -= (100/6); //6 δευτερόλεπτα
		}else if(c_answers >= 50){
			timer -= (100/5); //5 δευτερόλεπτα
		}
		
	}else if(game_type=="time_trial"){
		
	    timer -= (100/60) ; //60 δευτερόλεπτα
	}
	counter = setTimeout(countdown,1000);
}
Δημοσ. (επεξεργασμένο)

Για δοκίμασε να ορίσεις κάποιο bind με callback αφότου γίνει load το html σου,  πχ

$('#phonel').load('game.html',
  function(){
    $('.menu li').on('click', 
      function(event){
        event.preventDefault();
        clearTimeout(whatever);
        //load other stuff
    });
});

(.menu li υπέθεσα ότι είναι τα κουμπια του μενού σου, δεν πρόσεξα την html εκεί)

 

edit: μόλις έκανα και μια δοκιμή:

a.html

...
<a id="testing" class="btn btn-default">remove timeout</a>
<div class="container" id="fcon"></div>
...
<script>
jQuery(document).ready(function($) {
	$('#fcon').load('test.html', function(){
		$('#testing').on('click', function(e){
			e.preventDefault();
			clearInterval(tade);
			console.log('cleared')
		})
	});
});
</script>

kai test.html

<script>
var tade = setInterval(function(){
	console.log('still running');
}, 2000);
</script>

και δούλεψε κανονικά (έγινε clear το interval δηλαδή).

Επεξ/σία από alou
Δημοσ.

Εγώ το μόνο που παίρνω στην κονσόλα είναι αυτό :P

 

Uncaught ReferenceError: counter is not defined

$('#play_game').load("game/game.html", function(){
	$('.menu_links').on('click', function(e){
		e.preventDefault();
		clearTimeout(counter);
		console.log('cleared')
	});
}); 
Δημοσ.

Μα το counter ζεί μόνο μέσα στο function countdown(){.., είναι θέμα scope. Δήλωσε global το counter κάπου πριν και έξω από το function

var counter;
function countdown(){
	...
	counter = setTimeout(countdown,1000);
}
Δημοσ.

 

Μα το counter ζεί μόνο μέσα στο function countdown(){.., είναι θέμα scope. Δήλωσε global το counter κάπου πριν και έξω από το function

var counter;
function countdown(){
	...
	counter = setTimeout(countdown,1000);
}

Όχι είναι δηλωμένο κανονικά ως global και όχι μέσα στη συνάρτηση...

Σε κάποιες περιπτώσεις μέσα στον κώδικα του game.html γίνεται clearTimeout το counter αν χρειαστεί...

Δημοσ.

Ναι, όντως... περίεργο, αύριο αν δεν το έχεις λύσει το ξανακοιτάμε γιατί τα βλέπω διπλά πλέον :/

Δημοσ.

Όχι, έκανα πείραμα και εγώ και δεν είχε θέμα - τουλάχιστον από μόνο του. Δεν μπορώ όμως να παίξω με τον δικό σου κώδικα και δεν βρίσκω άκρη τι φταίει, στη θέση σου θα δοκίμαζα να αφαιρέσω τα πάντα από js στο game.html και να αφήσω να τρέχει αρχικά μόνο το counter timeout να δω αποτέλεσμα.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...