Home > Net >  Can we implement Pop up image when we click on the image without using dialog in angular
Can we implement Pop up image when we click on the image without using dialog in angular

Time:09-29

This code is what i found but this is not for angular. Can we implement the same in angular. or can we do it using pure CSS. I'll share the code below

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {font-family: Arial, Helvetica, sans-serif;}

#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 {-webkit-transform:scale(0)} 
  to {-webkit-transform:scale(1)}
}

@keyframes zoom {
  from {transform:scale(0)} 
  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%;
  }
}
</style>
</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>

<img id="myImg" src="img_snow.jpg" alt="Snow" style="width:100%;max-width:300px">

<!-- The Modal -->
<div id="myModal" >
  <span >&times;</span>
  <img  id="img01">
  <div id="caption"></div>
</div>

<script>
// 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;
  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";
}
</script>

</body>
</html>

This code is using javascript but i want to implement in angular. SO is there any alternative way to implement the Pop up image when click, in angular. Can we use pure CSS to implement the pop up image. Or is there any angular method to do the same.

CodePudding user response:

Use the Angular Material UI Library.

https://material.angular.io/components/dialog/overview

It provides an injectable mechanism which you can invoke with a custom component and parameters. The custom component will be displayed inside the dialog.

const ref = this.dialog.open(MyDialogContentComponent, {
  width: '250px',
  data: {foo: 'bar'},
});

CodePudding user response:

I think you can use CDK dialog insted of Material Dialog https://material.angular.io/cdk/dialog/overview

you can change the style so it has no rouded border and no margin/padding. Then you can show your image using the full space of the dialog.

If you want you don't even need a Component to display the image since you can use ng-template and pass the template as input when you open the dialog

Edit: here a code example

<h1> here your html code </h1>
// this is the small image and is clickable
<img src="img_snow.jpg" width="200" height="150" (click)="openDialog(myTemplate)">

// this template is invisible. It will be shown in the popup
<ng-template #myTemplate>
  <h2>here your img or whatever you want</h2>
  // this is your big popup image. Style it as you wish
  <img src="img_snow.jpg" style="height:100%; width:100%">
  <button (click)="myDialogRef?.close()">this close button is optional</button>
</ng-template>

your ts file

constructor(private dialog: Dialog) { }

myDialogRef: DialogRef<unknown, any>;

openDialog(template: TemplateRef<unknown>) {
   // you can pass additional params, choose the size and much more
   this.myDialogRef = this.dialog.open(template);
}

for more customisation look at the CDK Dialog documentation

  • Related