|
43 | 43 | introItems.push({
|
44 | 44 | element: currentElement,
|
45 | 45 | intro: currentElement.getAttribute("data-intro"),
|
46 |
| - step: parseInt(currentElement.getAttribute("data-step")) |
| 46 | + step: parseInt(currentElement.getAttribute("data-step")), |
| 47 | + position: currentElement.getAttribute("data-position") || 'bottom' |
47 | 48 | });
|
48 | 49 | }
|
49 | 50 |
|
|
141 | 142 | targetElement.onkeydown = null;
|
142 | 143 | }
|
143 | 144 |
|
| 145 | + function _placeTooltip(targetElement, tooltipLayer, arrowLayer){ |
| 146 | + var tooltipLayerPosition = _getOffset(tooltipLayer); |
| 147 | + tooltipLayer.style.top = null; |
| 148 | + tooltipLayer.style.right = null; |
| 149 | + tooltipLayer.style.bottom = null; |
| 150 | + tooltipLayer.style.left = null; |
| 151 | + switch(targetElement.getAttribute('data-position')){ |
| 152 | + case 'top': |
| 153 | + tooltipLayer.style.top = "-" + (tooltipLayerPosition.height + 10) + "px"; |
| 154 | + arrowLayer.className = 'introjs-arrow bottom'; |
| 155 | + break; |
| 156 | + case 'right': |
| 157 | + console.log(tooltipLayerPosition); |
| 158 | + tooltipLayer.style.right = "-" + (tooltipLayerPosition.width + 10) + "px"; |
| 159 | + arrowLayer.className = 'introjs-arrow left'; |
| 160 | + break; |
| 161 | + case 'bottom': |
| 162 | + tooltipLayer.style.bottom = "-" + (tooltipLayerPosition.height + 10) + "px"; |
| 163 | + arrowLayer.className = 'introjs-arrow top'; |
| 164 | + break; |
| 165 | + case 'left': |
| 166 | + tooltipLayer.style.left = "-" + (tooltipLayerPosition.width + 10) + "px"; |
| 167 | + arrowLayer.className = 'introjs-arrow right'; |
| 168 | + break; |
| 169 | + } |
| 170 | + } |
| 171 | + |
144 | 172 | /**
|
145 | 173 | * Show an element on the page
|
146 | 174 | *
|
|
158 | 186 | if(oldHelperLayer != null) {
|
159 | 187 | var oldHelperNumberLayer = oldHelperLayer.querySelector(".introjs-helperNumberLayer"),
|
160 | 188 | oldtooltipLayer = oldHelperLayer.querySelector(".introjs-tooltiptext"),
|
| 189 | + oldArrowLayer = oldHelperLayer.querySelector(".introjs-arrow"), |
161 | 190 | oldtooltipContainer = oldHelperLayer.querySelector(".introjs-tooltip")
|
162 | 191 |
|
163 | 192 | //set new position to helper layer
|
|
173 | 202 | oldShowElement.className = oldShowElement.className.replace(/introjs-showElement/,'').trim();
|
174 | 203 | //change to new intro item
|
175 | 204 | targetElement.className += " introjs-showElement";
|
176 |
| - |
177 |
| - //wait until the animation is completed |
178 |
| - setTimeout(function() { |
179 |
| - oldtooltipContainer.style.bottom = "-" + (_getOffset(oldtooltipContainer).height + 10) + "px"; |
180 |
| - }, 300); |
181 |
| - |
| 205 | + _placeTooltip(targetElement, oldtooltipContainer, oldArrowLayer); |
182 | 206 | } else {
|
183 | 207 | targetElement.className += " introjs-showElement";
|
184 | 208 |
|
185 | 209 | var helperLayer = document.createElement("div"),
|
186 | 210 | helperNumberLayer = document.createElement("span"),
|
| 211 | + arrowLayer = document.createElement("div"), |
187 | 212 | tooltipLayer = document.createElement("div");
|
188 | 213 |
|
189 | 214 | helperLayer.className = "introjs-helperLayer";
|
|
195 | 220 | document.body.appendChild(helperLayer);
|
196 | 221 |
|
197 | 222 | helperNumberLayer.className = "introjs-helperNumberLayer";
|
| 223 | + arrowLayer.className = 'introjs-arrow'; |
198 | 224 | tooltipLayer.className = "introjs-tooltip";
|
199 | 225 |
|
200 | 226 | helperNumberLayer.innerHTML = targetElement.getAttribute("data-step");
|
201 | 227 | tooltipLayer.innerHTML = "<div class='introjs-tooltiptext'>" + targetElement.getAttribute("data-intro") + "</div><div class='introjs-tooltipbuttons'></div>";
|
202 | 228 | helperLayer.appendChild(helperNumberLayer);
|
| 229 | + tooltipLayer.appendChild(arrowLayer); |
203 | 230 | helperLayer.appendChild(tooltipLayer);
|
204 | 231 |
|
205 | 232 | var skipTooltipButton = document.createElement("a");
|
|
224 | 251 | var tooltipButtonsLayer = tooltipLayer.querySelector('.introjs-tooltipbuttons');
|
225 | 252 | tooltipButtonsLayer.appendChild(skipTooltipButton);
|
226 | 253 | tooltipButtonsLayer.appendChild(nextTooltipButton);
|
227 |
| - |
228 |
| - |
| 254 | + |
229 | 255 | //set proper position
|
230 |
| - tooltipLayer.style.bottom = "-" + (_getOffset(tooltipLayer).height + 10) + "px"; |
| 256 | + _placeTooltip(targetElement, tooltipLayer, arrowLayer); |
231 | 257 | }
|
232 | 258 |
|
233 | 259 | //scroll the page to the element position
|
|
0 commit comments