vendredi 26 février 2016

How to allow easy save of displayed image with keyboard access?

I took some time to dive into web development last week (i.e. I'm a n00b) and I created some toy website with images that can be viewed in a convenient way (idea based on an example from w3schools).

// Get the modal
var modal = document.getElementById('myModal');

// Get the image and insert it inside the modal - use its "alt" text as a caption
var img = document.getElementById('myImg');
var modalImg = document.getElementById("img01");
var captionText = document.getElementById("caption");
img.onclick = function() {
  modal.style.display = "block";
  modalImg.src = this.src;
  modalImg.alt = this.alt;
  captionText.innerHTML = this.alt;
}

// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close")[0];

// When the user clicks on <span> (x), close the modal
span.onclick = function() {
  modal.style.display = "none";
}
#myImg {
  border-radius: 5px;
  cursor: pointer;
  transition: 0.3s;
}
#myImg:hover {
  opacity: 0.7;
}
/* The Modal (background) */

.modal {
  display: none;
  /* Hidden by default */
  position: fixed;
  /* Stay in place */
  z-index: 1;
  /* Sit on top */
  padding-top: 100px;
  /* Location of the box */
  left: 0;
  top: 0;
  width: 100%;
  /* Full width */
  height: 100%;
  /* Full height */
  overflow: auto;
  /* Enable scroll if needed */
  background-color: rgb(0, 0, 0);
  /* Fallback color */
  background-color: rgba(0, 0, 0, 0.9);
  /* Black w/ opacity */
}
/* Modal Content (image) */

.modal-content {
  margin: auto;
  display: block;
  width: 80%;
  max-width: 700px;
}
/* Caption of Modal Image */

#caption {
  margin: auto;
  display: block;
  width: 80%;
  max-width: 700px;
  text-align: center;
  color: #ccc;
  padding: 10px 0;
  height: 150px;
}
/* Add Animation */

.modal-content,
#caption {
  -webkit-animation-name: zoom;
  -webkit-animation-duration: 0.6s;
  animation-name: zoom;
  animation-duration: 0.6s;
}
@-webkit-keyframes zoom {
  from {
    transform: scale(0)
  }
  to {
    transform: scale(1)
  }
}
@keyframes zoom {
  from {
    transform: scale(0.1)
  }
  to {
    transform: scale(1)
  }
}
/* The Close Button */

.close {
  position: absolute;
  top: 15px;
  right: 35px;
  color: #f1f1f1;
  font-size: 40px;
  font-weight: bold;
  transition: 0.3s;
}
.close:hover,
.close:focus {
  color: #bbb;
  text-decoration: none;
  cursor: pointer;
}
/* 100% Image Width on Smaller Screens */

@media only screen and (max-width: 700px) {
  .modal-content {
    width: 100%;
  }
}
<!DOCTYPE html>
<html>

<head>
</head>

<body>

  <h2>Image Modal</h2>
  <p>In this example, we use CSS to create a modal (dialog box) that is hidden by default.</p>
  <p>We use JavaScript to trigger the modal and to display the current image inside the modal when it is clicked on. Also note that we use the value from the image's "alt" attribute as an image caption text inside the modal.</p>
  <p>Don't worry if you do not understand the code right away. When you are done with CSS, go to our JavaScript Tutorial to learn more.</p>

  <img id="myImg" src="http://ift.tt/21lUE48" alt="Northern Lights, Norway" width="300" height="200">

  <!-- The Modal -->
  <div id="myModal" class="modal">
    <span class="close">×</span>
    <img class="modal-content" id="img01">
    <div id="caption"></div>
  </div>

</body>

</html>

I also read something on WAI-ARIA etc. and I was wondering how people can save the image that is being displayed with key-board access. I tried, using the save-shortcut in the browser, but that turned out to save the entire webpage, rather than the displayed image.

Because I thought it would be easier (and make more sense in this case) to only save the image rather than the entire webpage, I was wondering whether it would make sense to overwrite the default save behaviour and how this could be done. Spontaneously I was thinking about something like

function handleKey(e) {
    if((e.ctrlKey || e.metaKey) && (e.keyCode || e.which == 83)) {
        // no idea how to implement save-behaviour
    }
}

but then I thought it would make sense to change the save behaviour of the browser as well if I change this shortcut.

Therefore my question: Is there some way to change the save-behaviour on a website (I'm not familiar with all possible web-technologies yet, but I am just curious if there would exist some way) and if this would not be possible or turn out to be a bad idea, what would be a good way to allow keyboard-users to save an image that is displayed as above?




Aucun commentaire:

Enregistrer un commentaire