0

Good day,

Thanks to the help of stackoverflow users for which I am very grateful, I have successfully implemented a click on a button to navigate to and display a separate section. The following code is working absolutely fine:

<button class="cupid-blue" href="p03" id="btnTwo" onclick="toggle(this)">&#128240; p3 </button>

Now, I would like that a click on one of the image has exactly the same behaviour and I have programmed my image in the following way :

<a href="#p03"><img src="img_snow.jpg" alt="Snow" style="width:100%"></a>

Now, I am not quite sure how I can link the onclick="toggle(this)" to my image in order to ensure it works and it displays the correct section (p03 in my example above). Up to now, I was quite unsucessful.

The toggle button successfully calls the following javascript function :

function toggleDisplay(className, displayState){
    var elements = document.getElementsByClassName(className)
    for (var i = 0; i < elements.length; i++){
        elements[i].style.display = displayState;
    }
  }
  function toggle(){
    document.onclick = function(e) {
      if (e.target.tagName == 'BUTTON') {
        var href = e.target.getAttribute("href");
        toggleDisplay('page', 'none');
        document.getElementById(href).style.display = 'block';
      }
    }
  }

I am not quite sure what the problem is and I would be grateful if I could get some guidance (let's put it clear that I'm not asking anyone to write code for me !).

Many thanks for your time and best wishes

Extract of my HTML code :

<!DOCTYPE html>
  <head>
    <title>Domoos V2 | home</title>
    <meta http-equiv="refresh" content="360">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>
    <meta http-equiv="pragma" content="no-cache">
    <link rel="stylesheet" type="text/css" href="css/mystyle.css?rnd=999" />
    <script type="text/javascript" src="scripts/display_section.js"></script>
  </head>
  <body>
    <div class="div_screen">
      <div class="div_screen_left_frame">
          <div class="div_screen_nav1">
            <ul id="menu">
            <button class="cupid-blue" href="pMain" id="btnOne" onclick="toggle(this)">&#x1F3E0; Main Page</button>
            <button class="cupid-blue" href="p03" id="btnTwo" onclick="toggle(this)">&#128240; p3 </button>
            </ul>
          </div>
      </div>
      <div class="div_screen_contents_frame">
        <div class="page active" id="pMain">
          <section class="icon fa fa-bolt">
            <div class="column">
              <a href="#p03"><img src="img_snow.jpg" alt="Snow" style="width:100%"></a>
              <center>Chambre 1</center>
            </div>
          </section>
        </div>
        <div class="page" id="p02">
          <section class="icon fa fa-bolt">
            Here comes the 2nd section
          </section>
        </div>
        <div class="page" id="p03">
          <section class="icon fa fa-bolt">
            Here comes the 3rd section
          </section>
        </div>
        <div class="page" id="p04">
          <section class="icon fa fa-bolt">
            Here comes the 4th section
          </section>
        </div>
      </div>
    </div>
  </body>
</html>

If it could be of any help to better understand my question (not sure though), I am also copying an extract of my css:

/* Three image containers (use 25% for four, and 50% for two, etc) */
.column {
float: left;
width: 19.0%;
padding: 2px;
}

/* Clear floats after image containers */
.row::after {
content: "";
clear: both;
display: table;
}

.div_screen {
font-family:"Quicksand", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-size: 90%;
color: blue;
position: fixed;
top: -3;
left: -3;
width: 1005px;
height: 540 px;
border: 2px solid #de2be4;
/*background: red;*/
}

.div_screen_left_frame {
position: absolute;
left: 1px;
top: 1px;
width: 146px;
height:536px;
border: 1px solid blue;
}

.div_screen_contents_frame {
position: absolute;
left: 150px;
top: 99px;
width: 852px;
height:438px;
border: 1px solid blue;
}

.div_screen_icon {
position: absolute;
left: 0px;
top: 0px;
width: 145px;
height: 95px;
border: 1px solid black;
}

.div_screen_nav1 {
position: absolute;
left: 0px;
top: 95px;
width: 145px;
height: 150px;
border: 1px solid black;
}

.div_screen_nav2 {
position: absolute;
left: 0px;
top: 248px;
width: 145px;
height: 287px;
border: 1px solid black;
}       

button.cupid-blue {
background-color: #d7e5f5;
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #d7e5f5), color-stop(100%, #cbe0f5));
background-image: -webkit-linear-gradient(top, #d7e5f5, #cbe0f5);
background-image: -moz-linear-gradient(top, #d7e5f5, #cbe0f5);
background-image: -ms-linear-gradient(top, #d7e5f5, #cbe0f5);
background-image: -o-linear-gradient(top, #d7e5f5, #cbe0f5);
background-image: linear-gradient(top, #d7e5f5, #cbe0f5);
border-top: 1px solid #abbbcc;
border-left: 1px solid #a7b6c7;
border-bottom: 1px solid #a1afbf;
border-right: 1px solid #a7b6c7;
border-radius: 12px;
-webkit-box-shadow: inset 0 1px 0 0 white;
box-shadow: inset 0 1px 0 0 white;
color: #1a3e66;
font: normal 11px/1 "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif;
padding: 6px 0 3px 0;
text-align: center;
text-shadow: 0 1px 1px #fff;
width: 140px;
height: 40px;
margin-top: 4px;
margin-bottom: 4px;
left: 5 px;
}

button.cupid-blue-rooms {
background-color: #d7e5f5;
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #d7e5f5), color-stop(100%, #cbe0f5));
background-image: -webkit-linear-gradient(top, #d7e5f5, #cbe0f5);
background-image: -moz-linear-gradient(top, #d7e5f5, #cbe0f5);
background-image: -ms-linear-gradient(top, #d7e5f5, #cbe0f5);
background-image: -o-linear-gradient(top, #d7e5f5, #cbe0f5);
background-image: linear-gradient(top, #d7e5f5, #cbe0f5);
border-top: 1px solid #abbbcc;
border-left: 1px solid #a7b6c7;
border-bottom: 1px solid #a1afbf;
border-right: 1px solid #a7b6c7;
border-radius: 12px;
-webkit-box-shadow: inset 0 1px 0 0 white;
box-shadow: inset 0 1px 0 0 white;
color: #1a3e66;
font: normal 11px/1 "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif;
padding: 6px 0 3px 0;
text-align: center;
text-shadow: 0 1px 1px #fff;
width: 130px;
height: 40px;
margin-top: 4px;
margin-bottom: 4px;
left: 5 px;
}

ul {
  position: absolute;
  z-index: 1;
  top: 0;
  bottom: 0;
  left: 0;
  margin: auto;
  width: 10%;
  padding: 0;
  text-align: center;
 }

.page{display: none;}
.page.active {display: block;}
Laurent
  • 711
  • 2
  • 12
  • 30
  • Do you mean dispatch custom event? – Vahid Alimohamadi Jun 04 '20 at 15:49
  • @VahidAlimohamadi : Thanks, but, actually, I am not quite sure what you mean by dispatch custom event? – Laurent Jun 04 '20 at 15:50
  • Do you need your ```onClick``` do something fisrt then move scroll to ```# ```ed element? – Vahid Alimohamadi Jun 04 '20 at 15:51
  • @VahidAlimohamadi. Yes, Vahid, actually, I want to scroll to a section of my html (similar to what I'm doing with a click on the button) – Laurent Jun 04 '20 at 15:52
  • This `Snow` by itself with no click handler will "go to" where that ID _p03_ is on the page. You should not need the `window.location.replace` — however, if you _do_ have a click handler the handler may be preventing the default behavior of going to the link target. – Stephen P Jun 04 '20 at 17:12

4 Answers4

2

Is this what you need?

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Static Template</title>
  </head>
  <body>
    <img
      style="cursor: pointer;"
      src="https://media.treehugger.com/assets/images/2018/07/nature-benefits.jpg.860x0_q70_crop-scale.jpg"
      onclick="(()=>{
    window.location.replace(window.location.href+'#section1');
    return false; })();return false;"
    />
    <div>
      Lorem ipsum dolor sit amet consectetur, adipisicing elit. Sunt inventore,
      facere necessitatibus at tempora nostrum hic. Eveniet, sint aut. Tenetur
      quo explicabo facilis doloremque officiis, harum illum quis natus
      reprehenderit. Lorem ipsum dolor sit, amet consectetur adipisicing elit.
      Blanditiis modi architecto voluptates labore vel distinctio fuga, nemo ad
      ullam perspiciatis dolore quis quo beatae placeat a neque, ex voluptas.
      Dolores? Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illum
      officiis, corporis dicta iure dolorum quam tempore repellendus excepturi
      libero? Voluptatem distinctio eos nemo similique possimus quos, fuga ex
      nulla perferendis? Lorem ipsum dolor sit amet, consectetur adipisicing
      elit. Illum officiis, corporis dicta iure dolorum quam tempore repellendus
      excepturi libero? Voluptatem distinctio eos nemo similique possimus quos,
      fuga ex nulla perferendis? Lorem ipsum dolor sit amet, consectetur
      adipisicing elit. Illum officiis, corporis dicta iure dolorum quam tempore
      repellendus excepturi libero? Voluptatem distinctio eos nemo similique
      possimus quos, fuga ex nulla perferendis? Lorem ipsum dolor sit amet,
      consectetur adipisicing elit. Illum officiis, corporis dicta iure dolorum
      quam tempore repellendus excepturi libero? Voluptatem distinctio eos nemo
      similique possimus quos, fuga ex nulla perferendis? Lorem ipsum dolor sit
      amet, consectetur adipisicing elit. Illum officiis, corporis dicta iure
      dolorum quam tempore repellendus excepturi libero? Voluptatem distinctio
      eos nemo similique possimus quos, fuga ex nulla perferendis? Lorem ipsum
      dolor sit amet, consectetur adipisicing elit. Illum officiis, corporis
      dicta iure dolorum quam tempore repellendus excepturi libero? Voluptatem
      distinctio eos nemo similique possimus quos, fuga ex nulla perferendis?
      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illum officiis,
      corporis dicta iure dolorum quam tempore repellendus excepturi libero?
      Voluptatem distinctio eos nemo similique possimus quos, fuga ex nulla
      perferendis? Lorem ipsum dolor sit amet, consectetur adipisicing elit.
      Illum officiis, corporis dicta iure dolorum quam tempore repellendus
      excepturi libero? Voluptatem distinctio eos nemo similique possimus quos,
      fuga ex nulla perferendis? Lorem ipsum dolor sit amet, consectetur
      adipisicing elit. Illum officiis, corporis dicta iure dolorum quam tempore
      repellendus excepturi libero? Voluptatem distinctio eos nemo similique
      possimus quos, fuga ex nulla perferendis? Lorem ipsum dolor sit amet,
      consectetur adipisicing elit. Illum officiis, corporis dicta iure dolorum
      quam tempore repellendus excepturi libero? Voluptatem distinctio eos nemo
      similique possimus quos, fuga ex nulla perferendis?
    </div>
    <div id="section1" style="border:1">
      <p>
        Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illum
        officiis, corporis dicta iure dolorum quam tempore repellendus excepturi
        libero? Voluptatem distinctio eos nemo similique possimus quos, fuga ex
        nulla perferendis?
      </p>
    </div>
  </body>
</html>
Vahid Alimohamadi
  • 4,900
  • 2
  • 22
  • 37
1

You can try the following:

<img onclick="document.getElementById('p03').scrollIntoView();">

Once image pressed, you will get relocated to the object with id="p03".

McRaZick
  • 323
  • 2
  • 11
1

If you try to scroll to an element in a smooth way here is an exemple.

For more precision make a comment. Hope this helped ;)

html, body {
scroll-behavior: smooth
}
<a href="#link" id="link2"> ⇩Link⇩ </a>
<div> lorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsum</div>
<div id="link"> HELLO $$$$HELLOHELLOHELLOHELLOHELLOHELLO$$$ HELLO</div>
 <a href="#link2"> ⇧Link2⇧ </a>
<div> lorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsum</div>
crg
  • 4,284
  • 2
  • 29
  • 57
  • Thanks, crg, I was more looking at something that Vahid suggested, but your example will help me in another part of my application. I'm very grateful for your help, thanks again and have a good day. Best wishes, Laurent – Laurent Jun 04 '20 at 16:58
1

Use an image click to go to a specific part of an html page

or How to scroll to a specific part of a page

You shouldn't need any javascript to "go to" a specific part of the page; that is what your anchor reference
<a href="#p03"><img src="img_snow.jpg" alt="Snow" style="width:100%"></a>
will do — it will change the URL from example.com/yourpage to example.com/yourpage#p03

That will jump to your <div class="page" id="p03">, scrolling it into view if it's not already visible. However if it is already showing on the page nothing will appear to happen.

But note — if you have an onclick event handler on that image/href the event handler might prevent the default behavior by calling event.preventDefault() or if the handler function returns false.
But if the only thing you want to do is scroll to the p03 div you don't need any javascript.

This example is copied from Vahid Alimohamadi's answer but I have removed the javascript on the <img> element and surrounded it with a link using an href with just the hash (fragment) #section1. If you run this snippet and Vahid's snippet you'll see they behave exactly the same.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Static Template</title>
  </head>
  <body>
    <a href="#section1"><img
      style="cursor: pointer;"
      src="https://media.treehugger.com/assets/images/2018/07/nature-benefits.jpg.860x0_q70_crop-scale.jpg"
    /></a>
    <div>
      Lorem ipsum dolor sit amet consectetur, adipisicing elit. Sunt inventore,
      facere necessitatibus at tempora nostrum hic. Eveniet, sint aut. Tenetur
      quo explicabo facilis doloremque officiis, harum illum quis natus
      reprehenderit. Lorem ipsum dolor sit, amet consectetur adipisicing elit.
      Blanditiis modi architecto voluptates labore vel distinctio fuga, nemo ad
      ullam perspiciatis dolore quis quo beatae placeat a neque, ex voluptas.
      Dolores? Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illum
      officiis, corporis dicta iure dolorum quam tempore repellendus excepturi
      libero? Voluptatem distinctio eos nemo similique possimus quos, fuga ex
      nulla perferendis? Lorem ipsum dolor sit amet, consectetur adipisicing
      elit. Illum officiis, corporis dicta iure dolorum quam tempore repellendus
      excepturi libero? Voluptatem distinctio eos nemo similique possimus quos,
      fuga ex nulla perferendis? Lorem ipsum dolor sit amet, consectetur
      adipisicing elit. Illum officiis, corporis dicta iure dolorum quam tempore
      repellendus excepturi libero? Voluptatem distinctio eos nemo similique
      possimus quos, fuga ex nulla perferendis? Lorem ipsum dolor sit amet,
      consectetur adipisicing elit. Illum officiis, corporis dicta iure dolorum
      quam tempore repellendus excepturi libero? Voluptatem distinctio eos nemo
      similique possimus quos, fuga ex nulla perferendis? Lorem ipsum dolor sit
      amet, consectetur adipisicing elit. Illum officiis, corporis dicta iure
      dolorum quam tempore repellendus excepturi libero? Voluptatem distinctio
      eos nemo similique possimus quos, fuga ex nulla perferendis? Lorem ipsum
      dolor sit amet, consectetur adipisicing elit. Illum officiis, corporis
      dicta iure dolorum quam tempore repellendus excepturi libero? Voluptatem
      distinctio eos nemo similique possimus quos, fuga ex nulla perferendis?
      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illum officiis,
      corporis dicta iure dolorum quam tempore repellendus excepturi libero?
      Voluptatem distinctio eos nemo similique possimus quos, fuga ex nulla
      perferendis? Lorem ipsum dolor sit amet, consectetur adipisicing elit.
      Illum officiis, corporis dicta iure dolorum quam tempore repellendus
      excepturi libero? Voluptatem distinctio eos nemo similique possimus quos,
      fuga ex nulla perferendis? Lorem ipsum dolor sit amet, consectetur
      adipisicing elit. Illum officiis, corporis dicta iure dolorum quam tempore
      repellendus excepturi libero? Voluptatem distinctio eos nemo similique
      possimus quos, fuga ex nulla perferendis? Lorem ipsum dolor sit amet,
      consectetur adipisicing elit. Illum officiis, corporis dicta iure dolorum
      quam tempore repellendus excepturi libero? Voluptatem distinctio eos nemo
      similique possimus quos, fuga ex nulla perferendis?
    </div>
    <div id="section1" style="border:1">
      <p>
        Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illum
        officiis, corporis dicta iure dolorum quam tempore repellendus excepturi
        libero? Voluptatem distinctio eos nemo similique possimus quos, fuga ex
        nulla perferendis?
      </p>
    </div>
  </body>
</html>

Action plus Scrolling

The reason you may want a click handler is if you were going to do other things and also scroll to your target.

Changing window.location.href as in Vahid's accepted answer does exactly the same thing as simply clicking on the link, so there's no benefit to doing it that way.
McRaZick's answer using scrollIntoView is better, programmatically, if you only want to scroll the page and not set the fragment (hash) to change the current URL.
But if you want to perform some action and (then) scroll the result into view you'll probably want to add an event handler.

In the original question the button example includes onclick="toggle(this)"
We don't know what toggle does, but suppose it reveals a description and some metadata about the image that was last clicked.

There are many ways to do this, including requesting the image info from the server, but to keep things simple I'll just reveal a div that already exists on the page and scroll it into view.

If you have several images and therefore several divs with descriptions you'll need to somehow associate an image with the div that describes it. That's easily done using the fragment identifer on the link that surrounds the image, as the question is using that setup <a ...><img ...></a>
If you didn't want links you could set it up as a data- attribute on the image itself, such as <img src="..." data-target="p03" ...>

In this example I attach a click-event handler to every image link marked as an image-link using a class. (I avoid inline "onclick=..." to keep content, style, and behavior separate concerns using MVC principles)

The image-info blocks are initially hidden and only revealed when the image-link is clicked. This is done just by toggling a class on the info div's list of classes; a class that overrides the display:none set for image-info blocks by inheriting the div's container display state. Instead of display:inherit this could have used display:block, but using inherit works on divs, spans, tables, etc, where display:block would do the wrong thing if applied to a span or a table. (using revert would be even better, but revert is not widely supported yet.)

Using toggle avoids the mess of needing logic to either add or remove and also makes it so if you click the image a second time the info div gets hidden again.

The correct div to reveal is found by using the href of whichever image-link was clicked — though this sample only has one image this would work with any number of images that each had their own image-info div.

Notice that there is still no code for scrolling — that is because after the event handler runs the normal behavior of clicking the link takes over (since the handler does not preventDefault() or return false)

document.querySelectorAll('a.image-link')
    .forEach(e => {
        e.addEventListener('click', event => {
            const targetName = event.currentTarget.href.replace(/^.*#/, '');
            const targetDiv = document.getElementById(targetName);
            targetDiv.classList.toggle('selected-image');
        })
    });
.image-info {
    display: none;
    border: 1px solid black;
    padding: 0.5em 1em;
}

.selected-image {
    display: inherit; /* 'revert' would be better but it's not widely supported yet */
}
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Static Template</title>
  </head>
  <body>
    <a class="image-link" href="#p03"><img
      style="cursor: pointer;"
      src="https://media.treehugger.com/assets/images/2018/07/nature-benefits.jpg.860x0_q70_crop-scale.jpg"
    /></a>
    <div>
      Lorem ipsum dolor sit amet consectetur, adipisicing elit. Sunt inventore,
      facere necessitatibus at tempora nostrum hic. Eveniet, sint aut. Tenetur
      quo explicabo facilis doloremque officiis, harum illum quis natus
      reprehenderit. Lorem ipsum dolor sit, amet consectetur adipisicing elit.
      Blanditiis modi architecto voluptates labore vel distinctio fuga, nemo ad
      ullam perspiciatis dolore quis quo beatae placeat a neque, ex voluptas.
      Dolores? Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illum
      officiis, corporis dicta iure dolorum quam tempore repellendus excepturi
      libero? Voluptatem distinctio eos nemo similique possimus quos, fuga ex
      nulla perferendis? Lorem ipsum dolor sit amet, consectetur adipisicing
      elit. Illum officiis, corporis dicta iure dolorum quam tempore repellendus
      excepturi libero? Voluptatem distinctio eos nemo similique possimus quos,
      fuga ex nulla perferendis? Lorem ipsum dolor sit amet, consectetur
      adipisicing elit. Illum officiis, corporis dicta iure dolorum quam tempore
      repellendus excepturi libero? Voluptatem distinctio eos nemo similique
      possimus quos, fuga ex nulla perferendis? Lorem ipsum dolor sit amet,
      consectetur adipisicing elit. Illum officiis, corporis dicta iure dolorum
      quam tempore repellendus excepturi libero? Voluptatem distinctio eos nemo
      similique possimus quos, fuga ex nulla perferendis? Lorem ipsum dolor sit
      amet, consectetur adipisicing elit. Illum officiis, corporis dicta iure
      dolorum quam tempore repellendus excepturi libero? Voluptatem distinctio
      eos nemo similique possimus quos, fuga ex nulla perferendis? Lorem ipsum
      dolor sit amet, consectetur adipisicing elit. Illum officiis, corporis
      dicta iure dolorum quam tempore repellendus excepturi libero? Voluptatem
      distinctio eos nemo similique possimus quos, fuga ex nulla perferendis?
      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illum officiis,
      corporis dicta iure dolorum quam tempore repellendus excepturi libero?
      Voluptatem distinctio eos nemo similique possimus quos, fuga ex nulla
      perferendis? Lorem ipsum dolor sit amet, consectetur adipisicing elit.
      Illum officiis, corporis dicta iure dolorum quam tempore repellendus
      excepturi libero? Voluptatem distinctio eos nemo similique possimus quos,
      fuga ex nulla perferendis? Lorem ipsum dolor sit amet, consectetur
      adipisicing elit. Illum officiis, corporis dicta iure dolorum quam tempore
      repellendus excepturi libero? Voluptatem distinctio eos nemo similique
      possimus quos, fuga ex nulla perferendis? Lorem ipsum dolor sit amet,
      consectetur adipisicing elit. Illum officiis, corporis dicta iure dolorum
      quam tempore repellendus excepturi libero? Voluptatem distinctio eos nemo
      similique possimus quos, fuga ex nulla perferendis?
    </div>
    <div id="p03" class="image-info">
      <p>
        <b>p03</b> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illum
        officiis, corporis dicta iure dolorum quam tempore repellendus excepturi
        libero? Voluptatem distinctio eos nemo similique possimus quos, fuga ex
        nulla perferendis?
      </p>
    </div>
  </body>
</html>
Stephen P
  • 14,422
  • 2
  • 43
  • 67