De onderstaande code draagt zorg voor een interactieve website om het geheugen te trainen. Via een array in javascript worden reeksen samengesteld in een specifieke volgorde. De items kunnen worden verplaatst met de muis. Wanneer een item op de juiste plek staat wordt deze groen.
05 | < meta charset = "UTF-8" > |
06 | < meta name = "viewport" content = "width=device-width, initial-scale=1.0" > |
07 | < title >Geheugenspel javascript</ title > |
08 | < link rel = "stylesheet" href = "style.css" > |
13 | < select id = "sequenceSelect" onchange = "scrambleRows()" > |
17 | < ul id = "sortable-list" ondragover = "allowDrop(event)" ondrop = "drop(event)" > |
21 | < div class = "button-container" > |
22 | < button onclick = "previousSequence()" >Vorige</ button > |
23 | < button onclick = "nextSequence()" >Volgende</ button > |
26 | < div class = "button-container" > |
27 | < button onclick = "scrambleRows()" >Scramble</ button > |
28 | < button onclick = "placeInCorrectOrder()" >Oplossen</ button > |
31 | < script src = "script.js" ></ script > |
02 | list-style-type : none ; |
08 | border : 1px solid #ddd ; |
11 | transition: background-color 0.3 s; |
21 | background-color : lightgreen; |
36 | justify- content : space-between; |
39 | .button-container button { |
008 | function previousSequence() { |
009 | var select = document.getElementById( 'sequenceSelect' ); |
010 | if (select.selectedIndex > 0) { |
011 | select.selectedIndex--; |
017 | function nextSequence() { |
018 | var select = document.getElementById( 'sequenceSelect' ); |
019 | if (select.selectedIndex < select.options.length - 1) { |
020 | select.selectedIndex++; |
026 | function readArr(arrReeksen) { |
028 | const sequences = {}; |
030 | for (let i = 0; i < arrReeksen.length; i++) { |
031 | const values = arrReeksen[i].split( ',' ); |
032 | const sequenceName = values[0].trim(); |
033 | sequences[sequenceName] = {}; |
035 | for (let j = 1; j < values.length; j++) { |
036 | sequences[sequenceName][j] = values[j].trim(); |
044 | function populateDropdown(sequences) { |
045 | var sequenceSelect = document.getElementById( "sequenceSelect" ); |
048 | sequenceSelect.innerHTML = "" ; |
051 | Object.keys(sequences).forEach( function (sequenceName) { |
052 | var option = document.createElement( "option" ); |
053 | option.value = sequenceName; |
054 | option.text = sequenceName; |
055 | sequenceSelect.add(option); |
060 | function scrambleRows() { |
062 | var sequenceSelect = document.getElementById( "sequenceSelect" ); |
063 | var sortableList = document.getElementById( "sortable-list" ); |
065 | sortableList.innerHTML = "" ; |
067 | var selectedSequence = sequenceSelect.value; |
068 | var items = Object.values(sequences[selectedSequence]); |
072 | items.forEach( function (item) { |
073 | var listItem = createListItem(item); |
074 | sortableList.appendChild(listItem); |
080 | function shuffleArray(array) { |
081 | for ( var i = array.length - 1; i > 0; i--) { |
082 | var j = Math.floor(Math.random() * (i + 1)); |
089 | function createListItem(text) { |
090 | var listItem = document.createElement( "li" ); |
091 | listItem.textContent = text; |
092 | listItem.draggable = true ; |
093 | listItem.addEventListener( 'dragstart' , dragStart); |
094 | listItem.addEventListener( 'dragend' , dragEnd); |
098 | function allowDrop(event) { |
099 | event.preventDefault(); |
102 | function dragStart(event) { |
103 | event.dataTransfer.setData( 'text/plain' , event.target.textContent); |
104 | event.target.classList.add( 'dragging' ); |
107 | function dragEnd(event) { |
108 | event.target.classList.remove( 'dragging' ); |
112 | function drop(event) { |
113 | event.preventDefault(); |
114 | const draggedText = event.dataTransfer.getData( 'text/plain' ); |
115 | const draggedItem = document.querySelector( '.dragging' ); |
118 | const targetItem = event.target.closest( 'li' ); |
120 | if (targetItem && targetItem !== draggedItem) { |
121 | const tempText = targetItem.textContent; |
122 | targetItem.textContent = draggedText; |
123 | draggedItem.textContent = tempText; |
130 | function placeInCorrectOrder() { |
131 | var sequenceSelect = document.getElementById( "sequenceSelect" ); |
132 | var sortableList = document.getElementById( "sortable-list" ); |
134 | sortableList.innerHTML = "" ; |
136 | var selectedSequence = sequenceSelect.value; |
137 | var items = Object.values(sequences[selectedSequence]); |
139 | items.forEach( function (item) { |
140 | var listItem = createListItem(item); |
141 | sortableList.appendChild(listItem); |
147 | function isItemInCorrectPosition(item) { |
148 | const selectedSequence = document.getElementById( "sequenceSelect" ).value; |
149 | const correctPosition = sequences[selectedSequence][Array.from(item.parentNode.children).indexOf(item) + 1]; |
150 | return item.textContent.trim() === correctPosition; |
153 | function checkOrder() { |
154 | const listItems = document.querySelectorAll( '#sortable-list li' ); |
156 | listItems.forEach(item => { |
157 | if (isItemInCorrectPosition(item)) { |
158 | item.classList.add( 'correct-position' ); |
160 | item.classList.remove( 'correct-position' ); |
165 | var sequences = readArr(arrReeksen); |
166 | populateDropdown(sequences); |