JSFiddle - React, Tailwind, and code Playground
by pererinha
JavaScript
// Objeto oficina com os dados da oficina
var Oficina = {
posicao : {
latitude : -25.435946,
longitude: -49.273365
},
valorPorKM : 5,
distanciaMaxima : 15,
// Funcao que ira verificar se o cliente esta por perto e ira calcular o valor do servico
calculaOPreco : function( posicao ){
var distancia = Distancia.distanciaEntreDoisPontos( posicao, this.posicao );
// Verifica se o cliente nao estah muito longe
if( distancia <= this.distanciaMaxima ){
// Duas casas decimais e troca o . por ,
var valor = ( this.valorPorKM * distancia ).toFixed( 2 ).toString().replace( '.', ',' );
if ( confirm( 'O custo do guincho será R$ ' + valor + '. Posso mandar?' ) ){
alert( 'O guincho chegará em alguns minutos!' );
}
} else {
// Somente duas cadas decimais ja eh o suficiente
distancia = distancia.toFixed( 2 );
alert( 'Ops, você está muito longe, a distância máxima que atendemos é ' + this.distanciaMaxima + ' KM e você está há ' + distancia + ' KM!' );
}
}
};
// Objeto localizacao, aqui estao as funcoes para trabalhar com a api geolocation
var Localizacao = {
// Inicia
inicia : function(){
// Funcao que serah chamada quando o browser retornar a posicao do usuario
var sucesso = function( posicao ){
Oficina.calculaOPreco( posicao.coords );
};
// Funcao que serah chamada caso de algum erro nesse processo de obter a posicao
var erro = function( erro ){
var erroDescricao = 'Ops, ';
switch( erro.code ) {
case erro.PERMISSION_DENIED:
erroDescricao += 'usuário não autorizou a Geolocation.';
break;
case erro.POSITION_UNAVAILABLE:
erroDescricao += 'localização indisponível.';
break;
case erro.TIMEOUT:
erroDescricao += 'tempo expirado.';
break;
case erro.UNKNOWN_ERROR:
erroDescricao += 'não sei o que foi, mas deu erro!';
break;
}
alert( erroDescricao )
};
// Verifica se o browser do usuario tem suporte a geolocation
if ( navigator.geolocation...