Interactive Feedback Form Using jQuery and CSS3

Interactive Feedback Form Using jQuery and CSS3
File Size: 3.32 KB
Views Total:
Last Update:
Publish Date:
Official Website: Go to website
License: MIT
   

A pretty, interactive, popup feedback form with random congratulation messages and fancy CSS3 animations. Powered by jQuery and CSS3 transition / transform / perspective properties.

How to use it:

1. Create a feedback dialog that is hidden on page load.

<div class="feedback-box">
  <div class="content"> <a class='close' href="#">x</a>
    <div class="confirm">
      <h1><strong>BOOOM!</strong> <span>We'll get right on that for ya</span></h1>
    </div>
    <header>What can we Improve here for you!</header>
    <section>
      <textarea name="feedback"></textarea>
      <button id='submit'>Send Feedback</button>
    </section>
  </div>
</div>

2. Create a button to toggle the feedback form.

<button id="feedback">Feedback</button>

3. The CSS styles for the toggle button.

button {
  background-color: #F58F23;
  color: #fff;
  border: none;
  padding: 10px 30px;
  cursor: pointer;
  font-weight: 300;
  font-size: 16px;
  -moz-transition: background-color 0.3s ease;
  -o-transition: background-color 0.3s ease;
  -webkit-transition: background-color 0.3s ease;
  transition: background-color 0.3s ease;
}

button:active, button:focus { outline: none; }

button#feedback {
  position: fixed;
  bottom: 0;
  right: 0;
  display: inline-block;
  -moz-border-radius: 4px 0 0 0;
  -webkit-border-radius: 4px;
  border-radius: 4px 0 0 0;
}

button:hover { background-color: #f3830b; }

4. The CSS styles for the feedback form.

.feedback-box {
  z-index: 10;
  position: fixed;
  bottom: 0;
  right: 0;
  display: inline-block;
  width: 500px;
  -moz-perspective: 1000;
  -webkit-perspective: 1000;
  perspective: 1000;
  pointer-events: none;
}

.feedback-box .content {
  height: 335px;
 filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
  opacity: 0;
  background: white;
  border: 1px solid #ddd;
  border-right: none;
  border-bottom: none;
  -moz-transform-style: preserve-3d;
  -webkit-transform-style: preserve-3d;
  transform-style: preserve-3d;
  -moz-transform-origin: 100% 100%;
  -ms-transform-origin: 100% 100%;
  -webkit-transform-origin: 100% 100%;
  transform-origin: 100% 100%;
  -moz-transform: rotateY(-180deg);
  -webkit-transform: rotateY(-180deg);
  transform: rotateY(-180deg);
  -moz-transition: all 0.4s cubic-bezier(0.685, -0.245, 0.19, 1.315);
  -o-transition: all 0.4s cubic-bezier(0.685, -0.245, 0.19, 1.315);
  -webkit-transition: all 0.4s cubic-bezier(0.685, -0.245, 0.19, 1.315);
  transition: all 0.4s cubic-bezier(0.685, -0.245, 0.19, 1.315);
}

.feedback-box .confirm {
  z-index: 2;
  color: #fff;
  position: absolute;
  height: 100%;
  width: 100%;
  background-color: #41C289;
  -moz-transform: scale(0, 0);
  -ms-transform: scale(0, 0);
  -webkit-transform: scale(0, 0);
  transform: scale(0, 0);
 filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
  opacity: 0;
  -moz-border-radius: 20px;
  -webkit-border-radius: 20px;
  border-radius: 20px;
  -moz-transition: all 0.4s cubic-bezier(0.685, -0.245, 0.19, 1.315);
  -o-transition: all 0.4s cubic-bezier(0.685, -0.245, 0.19, 1.315);
  -webkit-transition: all 0.4s cubic-bezier(0.685, -0.245, 0.19, 1.315);
  transition: all 0.4s cubic-bezier(0.685, -0.245, 0.19, 1.315);
}

.feedback-box .confirm h1 {
  text-align: center;
  font-weight: 600;
  Text-transform: uppercase;
  font-size: 70px;
  margin-top: 115px;
  letter-spacing: -.08em;
  line-height: 1.2;
}

.feedback-box .confirm h1 i { vertical-align: 3px; }

.feedback-box .confirm h1 span {
  display: block;
  font-size: 40%;
  font-weight: 300;
  text-transform: none;
  letter-spacing: .02em;
}

.feedback-box.show { pointer-events: auto; }

.feedback-box.show .content {
  -moz-transform: rotateY(0deg);
  -webkit-transform: rotateY(0deg);
  transform: rotateY(0deg);
 filter: progid:DXImageTransform.Microsoft.Alpha(enabled=false);
  opacity: 1;
}

.feedback-box.show-confirm .confirm {
  -moz-transform: scale(1, 1);
  -ms-transform: scale(1, 1);
  -webkit-transform: scale(1, 1);
  transform: scale(1, 1);
 filter: progid:DXImageTransform.Microsoft.Alpha(enabled=false);
  opacity: 1;
  -moz-border-radius: 0;
  -webkit-border-radius: 0;
  border-radius: 0;
}

.feedback-box.error textarea { border-color: red; }

.feedback-box header {
  z-index: 10;
  background-color: #F7F7F7;
  color: #F58F23;
  font-weight: 400;
  font-size: 18px;
  height: 55px;
  line-height: 55px;
  text-align: center;
  border-bottom: 1px solid #ddd;
}

.feedback-box section {
  padding: 30px;
  overflow: hidden;
  -moz-transition: all ease;
  -o-transition: all ease;
  -webkit-transition: all ease;
  transition: all ease;
}

.feedback-box section textarea {
  z-index: 0;
  width: 100%;
  margin-bottom: 20px;
  padding: 10px;
  font-size: 16px;
  line-height: 1.5;
  resize: none;
  color: #333;
  border: 1px solid #ddd;
  height: 150px;
  -moz-transition: all 0.3s ease;
  -o-transition: all 0.3s ease;
  -webkit-transition: all 0.3s ease;
  transition: all 0.3s ease;
}

.feedback-box section textarea:focus {
  outline: none;
  border: 1px solid #999;
}

.feedback-box section button {
  display: block;
  padding: 15px;
  text-align: center;
  width: 100%;
}

5. Load the latest version of jQuery library at the bottom of your html page.

<script src="//code.jquery.com/jquery-2.1.4.min.js"></script>

6. The jQuery script to active the feedback form.

(function($){
  var words = ["Boom!" , "Whammy!", "Booya!" , "Holler!", "Broskee!" , "All Good!" , "Right on!"];
  var feedback = $(".feedback-box");
  
  //Feedback Toggle
  $("#feedback").on("click" , function(){
    feedback.addClass("show");
  });
  
  //Close Trigger
  $(".close").on("click" , function(){
    feedback.removeClass("show");
    setTimeout(function(){ 
      feedback.removeClass("show-confirm").find("textarea").val('');
      console.log("reset")
    }, 1000);
  });

//Submit
  $("#submit").on("click" , function(){
     if( !$("textarea").val() ) {
       feedback.addClass("error");
       setTimeout(function(){
         feedback.removeClass("error");
       }, 500)
    }else{
      feedback.addClass("show-confirm");
      var randomWord = words[Math.floor(Math.random() * words.length)];
      $(".feedback-box h1 strong").text(randomWord);
      
      setTimeout(function(){
         feedback.removeClass("show").find("textarea").val('').delay(1000);
      },2000);
      
       setTimeout(function(){
         feedback.removeClass("show-confirm");
      },2200);
    }
  })
})(jQuery);

This awesome jQuery plugin is developed by soulrider911. For more Advanced Usages, please check the demo page or visit the official website.