Advertisement
mushroomh3ad

Untitled

Oct 10th, 2024
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.09 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>Range Slider com Máscara Monetária - Bootstrap 4</title>
  7.  
  8.     <!-- Bootstrap 4 CSS -->
  9.     <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
  10.    
  11.     <style>
  12.         .slider-labels {
  13.             display: flex;
  14.             justify-content: space-between;
  15.             margin-top: 10px;
  16.         }
  17.  
  18.         .slider-container {
  19.             margin-top: 20px;
  20.         }
  21.     </style>
  22. </head>
  23. <body>
  24.  
  25.     <form id="formSimulacao" autocomplete="off">
  26.  
  27.         <!-- Step 1 -->
  28.         <div class="step active" id="step1">
  29.        
  30.             <div class="container mt-5">
  31.            
  32.                 <div class="row justify-content-center">
  33.                      
  34.                    <div class="col-md-6">
  35.        
  36.                        <div class="form-group">
  37.                                <button id="voltar" name="voltar" class="btn btn-primary" type="button" onclick="portletHome()">Voltar</button>
  38.                        </div>
  39.                        
  40.                        <div class="form-group">
  41.                            <div style='display: none;' id="radioDivSegmento" class="col-md-6">
  42.                                <input type="radio" id="imoveis" name="segmento" value="IMOVEIS" checked>
  43.                            </div>
  44.                        </div>
  45.                        
  46.                        <h3>Escolha a forma desejada para simular, pelo valor da carta de cr&eacute;dito ou da parcela.</h3>
  47.        
  48.                        <div class="form-group">
  49.                            <div id="radioDiv">
  50.                                <input type="radio" id="credito" name="tipo" value="CREDITO" checked>
  51.                                <label for="credito">Valor do cr&eacute;dito</label>
  52.                                <input type="radio" id="parcela" name="tipo" value="PARCELA">
  53.                                <label for="parcela">Valor da parcela</label>
  54.                            </div>
  55.                        </div>
  56.    
  57.                         <!-- Campo de input para mostrar o valor com máscara monetária -->
  58.                         <div class="form-group">
  59.                             <input type="text" class="form-control" id="valorBem" value="300000">
  60.                         </div>
  61.    
  62.                         <!-- Range Slider logo abaixo do input -->
  63.                         <div class="slider-container">
  64.                             <input type="range" class="custom-range" id="slider" min="0" max="600000" step="1000" value="300000">
  65.                         </div>
  66.    
  67.                         <!-- Rótulos de mínimo e máximo para o slider -->
  68.                         <div class="slider-labels">
  69.                             <span id="min-label">R$ 0</span>
  70.                             <span id="max-label">R$ 600.000,00</span>
  71.                         </div>
  72.                        
  73.                         <p>Digite ou arraste o seletor acima para ajustar o valor.</p>
  74.        
  75.                        <div class="form-group">
  76.                            <button type="submit" id="verOpcoes" name="verOpcoes" class="btn btn-primary">Ver op&ccedil;&otilde;es</button>
  77.                        </div>
  78.        
  79.                        <div id="divMensagens">
  80.                            <div style='display: none;' id="mensagem-erro" class="alert alert-danger">
  81.                                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
  82.                                    <path d="M12 20C16.4187 20 20 16.4187 20 12C20 7.58125 16.4187 4 12 4C7.58125 4 4 7.58125 4 12C4 16.4187 7.58125 20 12 20ZM12 8C12.4156 8 12.75 8.33437 12.75 8.75V12.25C12.75 12.6656 12.4156 13 12 13C11.5844 13 11.25 12.6656 11.25 12.25V8.75C11.25 8.33437 11.5844 8 12 8ZM13 15C13 15.5531 12.5531 16 12 16C11.4469 16 11 15.5531 11 15C11 14.4469 11.4469 14 12 14C12.5531 14 13 14.4469 13 15Z" fill="#DA1414"></path>
  83.                                </svg>
  84.                                <span class="message"><strong>Ocorreu um erro ao realizar a Simula&ccedil;&atilde;o.</span>
  85.                            </div>
  86.                        </div>
  87.        
  88.                    </div>
  89.                    
  90.                </div>
  91.                
  92.             </div>
  93.            
  94.         </div>
  95.        
  96.     </form>
  97.  
  98.     <!-- jQuery e jQuery Mask Plugin -->
  99.     <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
  100.     <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.16/jquery.mask.min.js"></script>
  101.     <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.bundle.min.js"></script>
  102.    
  103.     <script type="text/javascript">
  104.         let $portletValorMinimoValorCredito = 0;
  105.         let $portletValorMaximoValorCredito = 600000;
  106.         let $portletValorInicialValorCredito = $portletValorMaximoValorCredito / 2;
  107.         let $portletValorMinimoValorParcela = 0;
  108.         let $portletValorMaximoValorParcela = 6000;
  109.         let $portletValorInicialValorParcela = $portletValorMaximoValorParcela / 2;
  110.  
  111.         // Aplicar a máscara no campo de input ao carregar a página
  112.         $("#valorBem").mask('000.000.000,00', {reverse: true});
  113.  
  114.         // Definir o valor inicial formatado corretamente
  115.         let valorInicial = 0;
  116.  
  117.         if (typeof $portletValorMaximoValorCredito != "undefined") {
  118.             valorInicial = $portletValorMaximoValorCredito / 2;
  119.         }
  120.  
  121.         $("#valorBem").val(formatCurrency(valorInicial));
  122.         $("#slider").val(formatCurrency(valorInicial));
  123.    
  124.             // Adiciona um evento onchange aos radio button
  125.         $('input[name="tipo"]').change(function() {
  126.            
  127.             let valorSelecionado = $('input[name="tipo"]:checked').val();
  128.    
  129.             if (valorSelecionado === "CREDITO") {
  130.                
  131.                 $('#valorBem').val(formatCurrency($portletValorInicialValorCredito));
  132.                 $("#max-label").text(formatCurrency($portletValorMaximoValorCredito));
  133.                 $('#slider').attr('max', $portletValorMaximoValorCredito);
  134.                 $('#slider').val($portletValorInicialValorCredito);
  135.  
  136.                
  137.             } else if (valorSelecionado === "PARCELA") {
  138.                
  139.                 $('#valorBem').val(formatCurrency($portletValorInicialValorParcela));
  140.                 $("#max-label").text(formatCurrency($portletValorMaximoValorParcela));
  141.                 $('#slider').attr('max', $portletValorMaximoValorParcela);
  142.                 $('#slider').val($portletValorInicialValorParcela);
  143.                
  144.             }
  145.            
  146.         });
  147.  
  148.         // Logica do Slider
  149.  
  150.         // Atualizar o valor do input conforme o slider muda
  151.         $("#slider").on('input', function() {
  152.            
  153.             let valorSlider = $(this).val();
  154.             let valorFormatado = formatCurrency(valorSlider);
  155.             $('#valorBem').val(valorFormatado);
  156.            
  157.         });
  158.  
  159.         // Quando o usuário digitar manualmente, manter o "R$" no campo
  160.         $("#valorBem").on('blur', function() {
  161.            
  162.             let valorBem = limparNumero($(this).val());
  163.            
  164.             if (valorBem > $portletValorMaximoValorCredito) {
  165.                
  166.                 let valorFormatado = formatCurrency($portletValorMaximoValorCredito);
  167.                
  168.                 $('#valorBem').val(valorFormatado);
  169.                 $("#slider").val(limparNumero(valorFormatado)); // Atualizar o slider com o valor correto
  170.                 return;
  171.                
  172.             }
  173.                    
  174.             if ($(this).val() === "") {
  175.                
  176.                 $(this).val(formatCurrency($("#slider").val())); // Aplicar formatação correta com "R$"
  177.                
  178.             } else {
  179.                
  180.                 let valorInput = $(this).val().replace(/\D/g, ''); // Remover todos os caracteres não numéricos
  181.                
  182.                 if (valorInput) {
  183.                    
  184.                     // Corrigir valor em centavos: divisível por 100 para trabalhar com reais
  185.                     let valorNum = parseInt(valorInput) / 100;
  186.                    
  187.                     if (!isNaN(valorNum)) {
  188.                         $(this).val(formatCurrency(valorNum)); // Aplicar formatação correta com "R$"
  189.                         $("#slider").val(valorNum); // Atualizar o slider com o valor correto
  190.                     }
  191.                    
  192.                 }
  193.                
  194.             }
  195.  
  196.         });
  197.  
  198.         // Função para formatar o valor como moeda
  199.         function formatCurrency(value) {
  200.             return 'R$ ' + parseInt(value).toLocaleString('pt-BR', {minimumFractionDigits: 2});
  201.         }
  202.  
  203.         function limparNumero(valor) {
  204.    
  205.             let valorFormatado = valor.substring(0, valor.length - 2);
  206.                
  207.             // Remove tudo que não seja número
  208.             return valorFormatado.replace(/[^\d]/g, '')
  209.        
  210.         }
  211.     </script>
  212.  
  213. </body>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement