วิธีสร้างป๊อปอัปแบบง่ายโดยใช้ jQuery


217

ฉันกำลังออกแบบเว็บเพจ เมื่อเราคลิกเนื้อหาของ div mail ที่มีชื่อฉันจะแสดงหน้าต่างป๊อปอัพที่มีอีเมลป้ายกำกับและกล่องข้อความได้อย่างไร


1
ฉันพบคำตอบนี้มีประโยชน์มากสำหรับการแจ้งเตือนอย่างรวดเร็วโดยไม่ต้องสัมผัส HTML หรือ CSS ที่มีอยู่ มันสร้างและแสดง div เพียงแค่ใช้ jQuery จาก js
mabi

คำตอบ:


241

ก่อนอื่น CSS - ปรับแต่งตามที่คุณต้องการ:

a.selected {
  background-color:#1F75CC;
  color:white;
  z-index:100;
}

.messagepop {
  background-color:#FFFFFF;
  border:1px solid #999999;
  cursor:default;
  display:none;
  margin-top: 15px;
  position:absolute;
  text-align:left;
  width:394px;
  z-index:50;
  padding: 25px 25px 20px;
}

label {
  display: block;
  margin-bottom: 3px;
  padding-left: 15px;
  text-indent: -15px;
}

.messagepop p, .messagepop.div {
  border-bottom: 1px solid #EFEFEF;
  margin: 8px 0;
  padding-bottom: 8px;
}

และ JavaScript:

function deselect(e) {
  $('.pop').slideFadeToggle(function() {
    e.removeClass('selected');
  });    
}

$(function() {
  $('#contact').on('click', function() {
    if($(this).hasClass('selected')) {
      deselect($(this));               
    } else {
      $(this).addClass('selected');
      $('.pop').slideFadeToggle();
    }
    return false;
  });

  $('.close').on('click', function() {
    deselect($('#contact'));
    return false;
  });
});

$.fn.slideFadeToggle = function(easing, callback) {
  return this.animate({ opacity: 'toggle', height: 'toggle' }, 'fast', easing, callback);
};

และสุดท้าย html:

<div class="messagepop pop">
  <form method="post" id="new_message" action="/messages">
    <p><label for="email">Your email or name</label><input type="text" size="30" name="email" id="email" /></p>
    <p><label for="body">Message</label><textarea rows="6" name="body" id="body" cols="35"></textarea></p>
    <p><input type="submit" value="Send Message" name="commit" id="message_submit"/> or <a class="close" href="/">Cancel</a></p>
  </form>
</div>

<a href="/contact" id="contact">Contact Us</a>

นี่คือตัวอย่าง jsfiddle และการใช้งาน

ขึ้นอยู่กับสถานการณ์ที่คุณอาจต้องการโหลดเนื้อหาป๊อปอัพผ่านการโทร ajax เป็นการดีที่สุดที่จะหลีกเลี่ยงปัญหานี้หากเป็นไปได้เนื่องจากอาจทำให้ผู้ใช้เกิดความล่าช้าอย่างมีนัยสำคัญก่อนที่จะเห็นเนื้อหา ต่อไปนี้คือการเปลี่ยนแปลงสองสามอย่างที่คุณต้องการหากคุณใช้วิธีการนี้

HTML กลายเป็น:

<div>
    <div class="messagepop pop"></div> 
    <a href="/contact" id="contact">Contact Us</a>
</div>

และความคิดทั่วไปของ JavaScript จะกลายเป็น:

$("#contact").on('click', function() {
    if($(this).hasClass("selected")) {
        deselect();               
    } else {
        $(this).addClass("selected");
        $.get(this.href, function(data) {
            $(".pop").html(data).slideFadeToggle(function() { 
                $("input[type=text]:first").focus();
            });
        }
    }
    return false;
});

มันทำงานขอบคุณ แต่ฉันจะรวมการโทรลงทะเบียนอีกปุ่ม เมื่อคลิกแล้วแบบฟอร์มการลงทะเบียนควรปรากฏขึ้น เพื่อที่ฉันรวมฟังก์ชั่นเดียวกันและเปลี่ยนชื่อของรหัสและชั้นเรียน ปัญหาคือเมื่อฉันคลิกปุ่มปิดของแบบฟอร์มการลงทะเบียนมันสลับรูปแบบการติดต่อ ต้องการความช่วยเหลือ @jason Davis
Rajasekar

1
เพื่อลบ html ที่คุณเพิ่มในการปิดให้เปลี่ยนวิธีการปิดเป็น $ (". close"). live ('คลิก', ฟังก์ชั่น () {$ (". pop"). slideFadeToggle (); $ ("# contact") .removeClass ("เลือก"); $ (". pop"). remove (); // เพิ่มสิ่งนี้ ... คืนค่าเท็จ;}); สิ่งนี้จะแก้ไขปัญหาที่คุณได้รับเมื่อคุณคลิกที่ลิงก์มากกว่าหนึ่งครั้งก่อนที่จะปิดป๊อปอัพ คำตอบที่ดีเรียบลื่นและเรียบง่าย ...
Jonx

10
@yahelc ลองคลิก "สมัคร" มากกว่าหนึ่งครั้งติดต่อกันจากนั้นคลิก "ยกเลิก" โอ๊ะ oooohhhh
AVProgrammer

ฉันไม่เห็นด้วยกับส่วน "รหัสที่ยอดเยี่ยม" เนื้อหาจำนวนมากถูกฮาร์ดโค้ดลงในจาวาสคริปต์ ใช่เราทุกคนมีจาวาสคริปต์ในเบราว์เซอร์ของเรา แต่ก็ไม่ใช่วิธีที่ถูกต้องในการทำเว็บ HTML ใช้สำหรับเนื้อหา js สำหรับ "การแต่งหน้า" Karim79 คำตอบดีกว่าจากมุมมองของฉัน รวมมาร์กอัปของคุณใน HTML ที่เป็นเจ้าของซ่อนมันและแสดงมันและนำมาเป็นป๊อปอัพ โซลูชันที่สะอาดกว่าการพิมพ์ HTML จำนวนมากโดยตรงจาก javascript คุณไม่จำเป็นต้องใช้ jQueryUI ถ้าคุณไม่ต้องการมีหลายวิธีในการใส่เนื้อหาลงในป๊อปอัป
ZolaKt

12
ตามที่เว็บไซต์ของ jQuery , ณ jQuery 1.7 ที่ .live () วิธีการเลิก ใช้. on ()เพื่อแนบตัวจัดการเหตุการณ์ ผู้ใช้ jQuery เวอร์ชันเก่าควรใช้. delegate () เพื่อกำหนดค่าเป็น. live () . ดังนั้นผมจึงแทนที่.liveกับ.on คลิกที่นี่เพื่อดูรหัสทั่วไปของ Andyเพิ่มเติม นอกจากนี้ฉันใช้ลิงค์ CDN สำหรับ jQuery รุ่นล่าสุดในหน้าจริง<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.0.min.js"></script>
vulcan raven

98

ตรวจสอบjQuery UI การโต้ตอบ คุณจะใช้มันแบบนี้:

The jQuery:

$(document).ready(function() {
    $("#dialog").dialog();
});

มาร์กอัป:

<div id="dialog" title="Dialog Title">I'm in a dialog</div>

ทำ!

โปรดจำไว้ว่าเป็นเรื่องเกี่ยวกับกรณีการใช้งานที่ง่ายที่สุดฉันขอแนะนำให้อ่านเอกสารเพื่อให้ได้แนวคิดที่ดีขึ้นเกี่ยวกับสิ่งที่สามารถทำได้


นอกเหนือจาก Jquery ไม่ว่าฉันจะต้องรวมปลั๊กอินใด ๆ @Karim
Rajasekar

8
@Rajasekar - คุณจะต้องดาวน์โหลดชุด jQuery UI และอย่างน้อยที่สุดก็รวม ui.core.js และ ui.dialog.js เพื่อรับการสนทนา หากคุณต้องการให้กล่องโต้ตอบนั้นสามารถลากได้และ / หรือปรับขนาดได้คุณจะต้องรวม ui.draggable.js และ ui.resizable.js
karim79

6
อืมมม จะเป็นคำตอบที่ดีกับ jsfiddle
ไบรซ์

23

ฉันใช้ปลั๊กอิน jQuery ชื่อColorBoxมันเป็น

  1. ใช้งานง่ายมาก
  2. มีน้ำหนักเบา
  3. ปรับแต่ง
  4. กล่องโต้ตอบป๊อปอัพที่อร่อยที่สุดที่ฉันเคยเห็นสำหรับ jQuery





3

ปลั๊กอินป๊อปอัพ Modal น้ำหนักเบามาก POPELT - http://welbour.com/labs/popelt/

มันมีน้ำหนักเบารองรับป๊อปอัปที่ซ้อนกันเชิงวัตถุสนับสนุนปุ่มแบบไดนามิกตอบสนองและอื่น ๆ อีกมากมาย การปรับปรุงครั้งต่อไปจะรวมถึงการส่งแบบฟอร์มป๊อปอัพอาแจ็กซ์ ฯลฯ

รู้สึกอิสระที่จะใช้และข้อเสนอแนะทวีต


2

หน้าต่างป๊อปอัพง่าย ๆ โดยใช้ html5 และ javascript

HTML: -

    <dialog id="window">  
     <h3>Sample Dialog!</h3>  
     <p>Lorem ipsum dolor sit amet</p>  
     <button id="exit">Close Dialog</button>
    </dialog>  

  <button id="show">Show Dialog</button> 

JavaScript: -

   (function() {  

            var dialog = document.getElementById('window');  
            document.getElementById('show').onclick = function() {  
                dialog.show();  
            };  
            document.getElementById('exit').onclick = function() {  
                dialog.close();  
            };
        })();

ฉันได้รับTypeError: dialog.show is not a functionข้อผิดพลาด คุณช่วยโปรดรวม JSFiddle ได้ไหม?
Magiranu

0

นี่คือป๊อปอัปที่ง่ายมาก:

<!DOCTYPE html>
<html>
    <head>
        <style>
            #modal {
                position:absolute;
                background:gray;
                padding:8px;
            }

            #content {
                background:white;
                padding:20px;
            }

            #close {
                position:absolute;
                background:url(close.png);
                width:24px;
                height:27px;
                top:-7px;
                right:-7px;
            }
        </style>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
        <script>
            var modal = (function(){
                // Generate the HTML and add it to the document
                $modal = $('<div id="modal"></div>');
                $content = $('<div id="content"></div>');
                $close = $('<a id="close" href="#"></a>');

                $modal.hide();
                $modal.append($content, $close);

                $(document).ready(function(){
                    $('body').append($modal);                       
                });

                $close.click(function(e){
                    e.preventDefault();
                    $modal.hide();
                    $content.empty();
                });
                // Open the modal
                return function (content) {
                    $content.html(content);
                    // Center the modal in the viewport
                    $modal.css({
                        top: ($(window).height() - $modal.outerHeight()) / 2, 
                        left: ($(window).width() - $modal.outerWidth()) / 2
                    });
                    $modal.show();
                };
            }());

            // Wait until the DOM has loaded before querying the document
            $(document).ready(function(){
                $('a#popup').click(function(e){
                    modal("<p>This is popup's content.</p>");
                    e.preventDefault();
                });
            });
        </script>
    </head>
    <body>
        <a id='popup' href='#'>Simple popup</a>
    </body>
</html>

โซลูชันที่มีความยืดหยุ่นมากขึ้นสามารถพบได้ในบทช่วยสอนนี้: http://www.jacklmoore.com/notes/jquery-modal-tutorial/ นี่คือclose.pngสำหรับตัวอย่าง


0

CSS POPUP LOGIC เท่านั้น! ลองทำดู ง่าย! ฉันคิดว่า mybe นี้จะแฮ็คที่เป็นที่นิยมในอนาคต

            <a href="#openModal">OPEN</a>

            <div id="openModal" class="modalDialog">
                <div>
                    <a href="#close"  class="close">X</a>
                    <h2>MODAL</h2>

                </div>
            </div>


.modalDialog {
    position: fixed;
    font-family: Arial, Helvetica, sans-serif;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    background: rgba(0,0,0,0.8);
    z-index: 99999;
    -webkit-transition: opacity 400ms ease-in;
    -moz-transition: opacity 400ms ease-in;
    transition: opacity 400ms ease-in;
    display: none;
    pointer-events: none;
}

.modalDialog:target {
    display: block;
    pointer-events: auto;
}

.modalDialog > div {
    width: 400px;
    position: relative;
    margin: 10% auto;
    padding: 5px 20px 13px 20px;
    border-radius: 10px;
    background: #fff;
    background: -moz-linear-gradient(#fff, #999);
    background: -webkit-linear-gradient(#fff, #999);
    background: -o-linear-gradient(#fff, #999);
}

มันไม่ได้ปิด!
vy32
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.