Buttons 3
by Tom M
HTML
<div id="listdiv">
<ul>
<li id="list1">Button 1</li>
<li id="list2">Button 2</li>
<li id="list3">Button 3</li>
</ul>
</div>
<div id="contentWrapper">
<div class="panel">
<p class ="button" id="btn1">Button 1</p>
<div id="article1" class="article outer">
Your comment is very incorrect. There is absolutely an alternative (more than one, in fact) to mixing your JavaScript in with your HTML markup.
</div>
</div>
<div class="panel">
<p class ="button" id="btn2">Button 2</p>
<div id="article2" class="article outer">
If you are programmatically generating the HTML anchors and injecting them into the DOM, it's marginally acceptable.
</div>
</div>
<div class="panel">
<p class ="button" id="btn3">Button 3</p>
<div id="article3" class="article outer">
It's not syntactically unsupported. JavaScript supports it just fine (just as it does with applying click handlers to other elements as well). It's simply the wrong HTML markup for the task at hand
</div>
</div>
<div id="fillMe">
</div>
</div>
CSS
.article {
display: none;
}
#fillMe {
padding-top: 35px;
width: 75%;
float: right;
}
#listdiv {
float: left;
width: 25%;
}
/*-------Smaller than 500px wide--------*/
@media screen and (max-width:500px) {
#fillMe, #listdiv {
display: none;
}
#contentWrapper .article {
display: none;
}
#contentWrapper .active .article {
display: block;
}
}
/*-------Wider than 500px wide--------*/
@media screen and (min-width:500px) {
#fillMe {
display: block;
}
.button {
display: none;
}
ul li {
list-style: none;
}
}
JavaScript
//Start listing variables for use in array.
var art1 = document.getElementById("article1");
var button1 = document.getElementById("list1");
var art2 = document.getElementById("article2");
var button2 = document.getElementById("list2");
var art3 = document.getElementById("article3");
var button3 = document.getElementById("list3");
var articleArray = [art1, art2, art3];
var buttonArray = [button1, button2, button3];
function mediaQuery(x) {
//If window is under 500px in width.
if (x.matches) {
//Begin accordion code
var initAccordion = function(accordionElement) {
function handlePanelClick(event) {
showPanel(event.currentTarget);
}
function showPanel(panel) {
var expandedPanel = accordionElement.querySelector(".active");
if (expandedPanel) {
expandedPanel.classList.remove("active");
}
panel.classList.add("active");
}
var allPanelElements = accordionElement.querySelectorAll(".panel");
for (var y = 0; len = allPanelElements.length; y++ ) {
allPanelElements[y].addEventListener("click", handlePanelClick);
}
showPanel(allPanelElements[0]);
}
initAccordion(document.getElementById("contentWrapper"));
}
else //If window if is over 500px in width.
{
//Begin button code.
var createfunc = function (i) {
return function() { document.getElementById("fillMe").innerHTML = articleArray[i].innerHTML;};
}
for (let i=0; i < articleArray.length; i++) {
let button = buttonArray[i];
button.addEventListener("click", createfunc(i));
}
}
}
//Declare media query and add listener.
var x = window.matchMedia("(max-width: 500px)")
mediaQuery(x) // Call listener function at run time
x.addListener(mediaQuery) // Attach listener function on state changes
//*******Does not work if run clicked on smaller than 500px screeen, then drag out. Buttons DO NOT WORK!!!