How to implement an image popup in jquery for firebase

蹲街弑〆低调 提交于 2019-12-22 18:36:45

问题


I am in a bit trouble as I don't know how to implement the image popup in jquery for firebase. I have searched it on the internet but did not find the way how to implement it for the dynamic websites. I am having the following jquery code, can anyone help? I haven't found anything on stackoverflow also regarding this.

this is my html code

<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
  <meta name="description" content="">
  <meta name="author" content="">

  <title>images</title>

    <!-- Latest compiled and minified CSS -->
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">

  <!-- Optional theme -->
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r" crossorigin="anonymous">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css">
  <link rel="stylesheet" href="overrides.css">


    </head>

    <style>
.contentImage{
    position: relative;
  }


.image {
  opacity: 1;
  display: block;
  width: 100%;
  height: 40%;
  transition: .5s ease;
  backface-visibility: hidden;
}


.image:hover {
  opacity: 0.3;
}

.gallery {
    margin: 5px;
    border: 1px solid #ccc;
    float: left;
    width: 180px;
}

.gallery:hover {
    border: 1px solid #777;
}

.gallery img {
    width: 100%;
    height: auto;
}



</style>
<body>

  <nav class="navbar navbar-inverse navbar-static-top">
    <div class="container">
      <div class="navbar-header">
        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
          <span class="sr-only">Toggle navigation</span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
        <a class="navbar-brand" href="#">here is the title</a>
      </div>
      <div id="navbar" class="collapse navbar-collapse">
        <ul class="nav navbar-nav">
          <li><a href="index.html">Home</a></li>
          <li><a href="#">Your images</a></li>
          <li class="active"><a href="#">Public images</a></li>
        </ul>
      </div><!--/.nav-collapse -->
    </div>
  </nav>

  <div class="container" id="contentHolder">
  </div>


  <script src="https://www.gstatic.com/firebasejs/live/3.0/firebase.js"></script>
  <script>    
    // Initialize Firebase
    var config = {
      apiKey: "AIzaSyB181Itkz9i9YjeJYLq9GbF94p8409wEfE",
    authDomain: "farmyantra.firebaseapp.com",
    databaseURL: "https://farmyantra.firebaseio.com",
    storageBucket: "farmyantra.appspot.com",
    messagingSenderId: "146534813177"
    };
    firebase.initializeApp(config);
  </script>
  <script src="https://apis.google.com/js/platform.js" async defer></script>
  <!-- Bootstrap core JavaScript
  ================================================== -->
  <!-- Placed at the end of the document so the pages load faster -->
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
  <script>window.jQuery || document.write('<script src="../../assets/js/vendor/jquery.min.js"><\/script>')</script>
  <!-- Latest compiled and minified JavaScript -->
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
  <script type="text/javascript" src="timeline.js"></script>


</body>
</html>

and this is my js file

$(document).ready(function(){
    firebase.auth().onAuthStateChanged(function(user) {
    if (user) {
      // User is signed in.
      var token = firebase.auth().currentUser.uid;
      queryDatabase(token);
    } else {
      // No user is signed in.
      window.location = "index.html";
    }
});
});


function queryDatabase(token) {
  firebase.database().ref('/Posts/').once('value').then(function(snapshot) {
    var PostObject = snapshot.val();
    var keys = Object.keys(PostObject);
    var currentRow;
    for (var i = 0; i< keys.length; i++) {
      var currentObject = PostObject[keys[i]];
      if (i % 4 == 0) {
        currentRow = document.createElement("div");
        $(currentRow).addClass("row");
        $("#contentHolder").append(currentRow);
      }
      var col = document.createElement("div");
      $(col).addClass("col-lg-3");
      var image = document.createElement("img");
      image.src = currentObject.url;
      $(image).addClass("contentImage  image hover ");
      var p = document.createElement("p");
      $(p).html(currentObject.caption);
      $(p).addClass("contentCaption");
      $(col).append(image);
      $(col).append(p);
      $(currentRow).append(col);
      //create new row on every third entry
      //col-lg-4
    }
    // ...
  });

}

回答1:


Well, your question is not clear. However let me try to answer as per my understanding. If you want to display images in a popup, add a bootstrap modal to html, and on click of each image that you are displaying from firebase database,show the bootstrap modal as explained below:

Add this modal div to your HTML:

<div id="imageModal" class="modal fade" role="dialog">
  <div class="modal-dialog modal-sm">
     <div class="modal-content">
        <div class="modal-header">
           <button type="button" class="close" data-dismiss="modal">&times;</button>
           <h3 class="modal-title">Caption goes here..</h3>
        </div>
        <div class="modal-body">
           <div id="image"> </div>
        </div>
     </div>
  </div>

Now in your timeline.js file, add below code:

$('img').on('click', function () {
      $('#imageModal #image').empty();
      var imgUrl = $(this).attr('src');
      var caption = $(this).siblings('.contentCaption').html();
      $('#imageModal #image').append('<img width="100%" height="100%" src="' + imgUrl + '"></img>');
      $('#imageModal .modal-title').text(caption);
      $('#imageModal').modal('show');
   });

Note: There is a small error in your queryDatabase function:

var image = document.createElement("img");
image = document.createElement("div")
image.src = currentObject.url;

You are creating an image element and assigning the same variable to a div element. So, the image element is overwritten by div element. Delete the second statement image = document.createElement("div") for you to display the image element.



来源:https://stackoverflow.com/questions/43537135/how-to-implement-an-image-popup-in-jquery-for-firebase

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!