Skip to content

Instantly share code, notes, and snippets.

@jocubeit
Created March 18, 2019 02:06
Show Gist options
  • Save jocubeit/3d6f346a39ac2c32261fd6b969742dc9 to your computer and use it in GitHub Desktop.
Save jocubeit/3d6f346a39ac2c32261fd6b969742dc9 to your computer and use it in GitHub Desktop.
Dot Digit Input

Dot Digit Input

The nice input with dots that you fill. One of my YouTube subscribers asked me how to do that you can find that on some websites this cool thing. And I was wondering how they do that. Some messed up tricks and wacks and we got this. It also works on the phone

A Pen by Godje on CodePen.

License.

.container
//- h1 Dot digit input
//- p Type the code that you received in your e-mail below:
.inputs#inputs
input(maxlength="2" placeholder="•" value="")
input(maxlength="2" placeholder="•" value="")
input(maxlength="2" placeholder="•" value="")
input(maxlength="1" placeholder="•" value="")
function processInput(holder){
var elements = holder.children(), //taking the "kids" of the parent
str = ""; //unnecesary || added for some future mods
elements.each(function(e){ //iterates through each element
var val = $(this).val().replace(/\D/,""), //taking the value and parsing it. Returns string without changing the value.
focused = $(this).is(":focus"), //checks if the current element in the iteration is focused
parseGate = false;
val.length==1?parseGate=false:parseGate=true;
/*a fix that doesn't allow the cursor to jump
to another field even if input was parsed
and nothing was added to the input*/
$(this).val(val); //applying parsed value.
if(parseGate&&val.length>1){ //Takes you to another input
var exist = elements[e+1]?true:false; //checks if there is input ahead
exist&&val[1]?( //if so then
elements[e+1].disabled=false,
elements[e+1].value=val[1], //sends the last character to the next input
elements[e].value=val[0], //clears the last character of this input
elements[e+1].focus() //sends the focus to the next input
):void 0;
} else if(parseGate&&focused&&val.length==0){ //if the input was REMOVING the character, then
var exist = elements[e-1]?true:false; //checks if there is an input before
if(exist) elements[e-1].focus(); //sends the focus back to the previous input
}
val==""?str+=" ":str+=val;
});
}
$("#inputs").on('input', function(){processInput($(this))}); //still wonder how it worked out. But we are adding input listener to the parent... (omg, jquery is so smart...);
$("#inputs").on('click', function(e) { //making so that if human focuses on the wrong input (not first) it will move the focus to a first empty one.
var els = $(this).children(),
str = "";
els.each(function(e){
var focus = $(this).is(":focus");
$this = $(this);
while($this.prev().val()==""){
$this.prev().focus();
$this = $this.prev();
}
})
});
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
@import url('https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700')
$fontsize: 60px //code
$placeholderColor: lighten(#3498db, 20%)
body
background-color: #2980b9
background-image: linear-gradient(45deg, darken(#2980b9, 10%), #3498db)
background-size: 100%
background-position: 0 0
background-attachment: fixed
padding: 10px
height: 100vh
color: #fff
font-family: "Open Sans", sans-serif
box-sizing: border-box
overflow: hidden
input::-webkit-input-placeholder
color: $placeholderColor !important
input:-moz-placeholder
color: $placeholderColor !important
input::-moz-placeholder /* Firefox 19+ */
color: $placeholderColor !important
input:-ms-input-placeholder
color: $placeholderColor !important
.container
width: 90%
height: 100vh
margin: 0 auto
display: flex
flex-direction: column
justify-content: center
align-items: center
p
font-size: 24px
font-weight: 100
h1
font-size: 32px
font-weight: 600
.inputs
input
width: #{$fontsize/(3/2)+10}
height: $fontsize
line-height: 100%
background-color: transparent
border: 0
outline: 0
color: white
font-size: $fontsize
word-spacing: 0px
overflow: hidden
text-align: center
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment