javascript - jQuery 弹出窗口 - 菜单/图像设计

标签 javascript jquery html css

enter image description here

我想设计一些像我放在上面的照片,它给出了我想要完成的事情的基本概念。我认为这样的事情可以让用户根据车牌的外观(和类别)进行选择。

此外,它还预先向用户显示价格,并允许用户浏览不同的车牌。我还想要如果用户点击盘子,他们可以看到完整尺寸的盘子。

我设计中的灰色方框代表车牌的图像,下方是我放置的许可证名称和价格。

我想出的是一个组合下拉菜单,但我试图找到更像这个弹出窗口的东西。我必须选择单选按钮(是/否)如果是,如果没有任何反应,除了清除价格,如果已经选择了一个盘子,就会出现像图像一样的弹出窗口。

如有任何帮助,我们将不胜感激!

http://jsfiddle.net/j585zy0y/4/

$(document).ready(function(){
		
    // When the header for the custom drop-down is clicked
    $(".selectHeader").click(function() {

        // cache the actual dropdown scroll container
        var dropdown = $(this).parent().find(".drop_down_scroll_container");

        // Toggle the visibility on click
        if (dropdown.is(":visible")) {
            dropdown.slideUp();
            $(this).parent().find(".dropdown-subcategory").fadeOut();
        } else {
            dropdown.slideDown();
        }

    });



	// When a top-level menu item is hovered, decide if its
	// coorespnding submenu should be visible or hidden
    $(".drop_down_scroll_container span").hover(

        // hover on
        function() {

            // Remove the "highlighted class from all other options
            $(this).parent().find("span").removeClass("highlighted").removeClass("selected");
            $(this).addClass("highlighted").addClass("selected");

            // Get the index of the hovered span
            var index = $(this).index();

            // Use the hovered index to reveal the 
            // dropdown-subcategory of the same index
            var subcategorydiv = $(this).parent().parent().find(".dropdown-subcategory").eq(index);
            hideallSubmenusExceptMenuAtIndex($(this).parent().parent(), index);
            subcategorydiv.slideDown();
        },

        // hover off
        function() {
            if (!$(this).hasClass("highlighted")) {
                var index = $(this).index();
                var subcategorydiv = $(this).parent().parent().find(".dropdown-subcategory").eq(index);
                subcategorydiv.slideUp();
            }
    });

	// Hide all submenu items except for the submenu item at _index
	// This will hide any of the previously opened submenu items
    function hideallSubmenusExceptMenuAtIndex(formElement, _index) {
        formElement.find(".dropdown-subcategory").each(
            function(index) {
                if (_index != index) {
                    $(this).hide();
                }
            }
        );
    }

	// When any menu item is hovered
    $("span").hover(
        function() {
            $(".hoveredOver").text($(this).text());
        },
        function() {
            $(".hoveredOver").text("");
        }
    );


    // When a sub-menu option is clicked
    $(".dropdown-subcategory span").click(function() {
        $(".dropdown-subcategory span").removeClass("selected");
        $(".clickedOption").text($(this).text());
        $(this).addClass("selected");
        $(this).parent().parent().find(".selectHeader").text($(this).text());
        closeDropDown($(this).parent().parent());
        showSpecialPlateModal($(this).text(), $(this).attr("data-image"), $(this).attr("data-price"), $(this).attr("data-code"));
    });

    // Close the dropdowns contained in divToSearch
    function closeDropDown(divToSearch) {
        divToSearch.find(".drop_down_scroll_container").fadeOut();
        divToSearch.find(".dropdown-subcategory").fadeOut();
    };
	
    // Populate and Launch the bootstrap Modal Dialog Specialty Plates 
    function showSpecialPlateModal(name, image, price, code) {
	  $('#modal_special').find('.modal-body')
		.html('<h2>' + name + '</h2>')
		.append('<br/>Special Plate Code: <span class="code">' + code + '</span><br/>')
		.append('<p>Image will go here:</p><br/><img alt="" src="' + image + '"/>')
		.append('<br/><br/>Price: <span class="price">' + price + '</span><br/>')
		.end().modal('show');
    }

    // When the modal "Accept" button is pressed
    $('.accept').on('click', function() {
		var modal_element = $('#modal_special');
		var name = modal_element.find("h2").text();
		var price = modal_element.find("span.price").text();
		var code = modal_element.find("span.code").text();
		$('#modal_special').modal('hide').end(alert(name + " was selected for a price of " + price));
    });

});
	
#dropdown {
width:175px;
height:200px;
position:relative;
font-size:12px;
}

.selectHeader {
height:20px;
width:100%;
background-color:#fff;
border:solid thin #ccc;
color:#000;
cursor:pointer;
padding:0 3px;
}

#dropdown span {
display:block;
background-color:#fff;
color:#000;
cursor:pointer;
font-weight:400;
font:inherit;
padding:0 3px;
}

#dropdown span:hover {
background-color:#1C7BD2;
color:#fff;
}

.drop_down_scroll_container {
display:none;
width:100%;
height:100%;
overflow:scroll;
border:solid thin #ccc;
}

.dropdown-subcategory {
display:none;
position:absolute;
top:20px;
left:100%;
z-index:100;
width:100%;
border:solid thin #ccc;
}

.selected {
background-color:#1C7BD2!important;
color:#fff!important;
}

.boxshadow {
box-shadow:0 2px 7px 1px rgba(119,119,119,0.68);
-moz-box-shadow:0 2px 7px 1px rgba(119,119,119,0.68);
-webkit-box-shadow:0 2px 7px 1px rgba(119,119,119,0.68);
}

.hoveredOver,.clickedOption {
font-weight:700;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
You are hovered over: <span class="hoveredOver"></span><br/>
You have clicked on option: <span class="clickedOption"></span>

<br/><br/>

<!-- CUSTOM DROP DOWN EXAMPLE -->

<div id="dropdown" class="specialtyPlatesCategories">
    
    <div class="selectHeader">Click to Select Plates:</div>
    
    <!-- THIS IS WHERE YOU WILL PUT YOUR TOP-LEVEL OPTIONS -->
    <div class="drop_down_scroll_container"> 
 <span>Environment / Wildlife</span> 
 <span>Community Interest</span> 
 <span>Health Interest</span> 
 <span>Family / Kids</span> 
 <span>American Heroes</span> 
 <span>Professional Sports</span> 
 <span>Collegiate</span> 
 <span>Motorcycle</span> 
 </div> 

 <!-- THIS IS WHERE YOU WILL PUT YOUR SUB-LEVEL OPTIONS --> 
 <div id="Environment / Wildlife_subcategories" class="dropdown-subcategory"> 
 <span data-code="ANR" data-image="/images/img/AnimalFriend.png" data-price="30">Animal Friend</span> 
 <span data-code="QCR" data-image="/images/img/Aquaculture.png" data-price="30">Aquaculture</span> 
 <span data-code="CER" data-image="/images/img/ProtectOurOceans.png" data-price="30">Protect Our Oceans</span> 
 <span data-code="CWR" data-image="/images/img/ConserveWildlife.png" data-price="30">Conserve Wildlife</span> 
 <span data-code="DFR" data-image="/images/img/DiscoverFloridaOceans.png" data-price="30">Discover Florida Oceans</span> 
 <span data-code="ERR" data-image="/images/img/EvergladesRiverofGrass.png" data-price="25">Everglades River of Grass</span> 
 <span data-code="FVR" data-image="/images/img/FishFlorida.png" data-price="27">Fish Florida</span> 
 <span data-code="INR" data-image="/images/img/IndianRiverLagoon.png" data-price="20">Indian River Lagoon</span> 
 <span data-code="LBR" data-image="/images/img/LargemouthBass.png" data-price="30">Largemouth Bass</span> 
 <span data-code="PAR" data-image="/images/img/ProtectthePanther.png" data-price="30">Protect the Panther</span> 
 <span data-code="PFR" data-image="/images/img/ProtectFloridaSprings.png" data-price="30">Protect Florida Springs</span> 
 <span data-code="WHR" data-image="/images/img/ProtectFloridaWhales.png" data-price="30">Protect Florida Whales</span> 
 <span data-code="POR" data-image="/images/img/ProtectOurReefs.png" data-price="30">Protect Our Reefs</span> 
 <span data-code="PWR" data-image="/images/img/ProtectWildDolphins.png" data-price="25">Protect Wild Dolphins</span> 
 <span data-code="SZR" data-image="/images/img/SaveOurSeas.png" data-price="30">Save Our Seas</span> 
 <span data-code="MTR" data-image="/images/img/SavetheManatee.png" data-price="30">Save the Manatee</span> 
 <span data-code="FBR" data-image="/images/img/SaveWildFlorida.png" data-price="30">Florida Biodiversity - Save Wild Florida</span> 
 <span data-code="STR" data-image="/images/img/SeaTurtle.png" data-price="28">Sea Turtle</span> 
 <span data-code="SNR" data-image="/images/img/WildlifeFoundationofFlorida.png" data-price="30">Wildlife Foundation of Florida</span> 
 <span data-code="FFR" data-image="/images/img/StateWildflower.png" data-price="20">State Wildflower</span> 
 <span data-code="TAR" data-image="/images/img/TampaBayEstuary.png" data-price="20">Tampa Bay Estuary</span> 
 <span data-code="TCR" data-image="/images/img/TreesareCool.png" data-price="30">Trees are Cool</span> 
 </div> 

 <div id="Community Interest_subcategories" class="dropdown-subcategory"> 
 <span data-code="AER" data-image="/images/img/AgriculturalEducation.png" data-price="30">Agricultural Education</span> 
 <span data-code="AGR" data-image="/images/img/Agriculture.png" data-price="25">Agriculture</span> 
 <span data-code="CLR" data-image="/images/img/ChallengerColumbia.png" data-price="30">Challenger/Columbia</span> 
 <span data-code="CFR" data-image="/images/img/CorrectionsFoundation.png" data-price="30">Corrections Foundation</span> 
 <span data-code="ESR" data-image="/images/img/EndlessSummer.png" data-price="30">Endless Summer</span> 
 <span data-code="ARR" data-image="/images/img/FloridaArts.png" data-price="25">Florida Arts</span> 
 <span data-code="HFR" data-image="/images/img/FloridaHorsePark.png" data-price="30">Florida Horse Park (Discover Florida's Horses)</span> 
 <span data-code="FYR" data-image="/images/img/FloridaSheriffsYouthRanches.png" data-price="30">Florida Sheriffs Youth Ranches</span> 
 <span data-code="TNR" data-image="/images/img/FloridaTennis.png" data-price="30">Florida Tennis</span> 
 <span data-code="ORR" data-image="/images/img/FraternalOrderofPolice.png" data-price="30">Fraternal Order of Police</span> 
 <span data-code="FQR" data-image="/images/img/FreeMasonry.png" data-price="30">Free Masonry</span> 
 <span data-code="GOR" data-image="/images/img/GolfCapital.png" data-price="30">Golf Capital</span> 
 <span data-code="HAR" data-image="/images/img/HomeOwnership.png" data-price="30">Home Ownership</span> 
 <span data-code="HRR" data-image="/images/img/HorseCountry.png" data-price="30">Horse Country</span> 
 <span data-code="IMR" data-image="/images/img/Imagine.png" data-price="30">Imagine</span> 
 <span data-code="IGR" data-image="/images/img/InGodWeTrust.png" data-price="30">In God We Trust</span> 
 <span data-code="LHR" data-image="/images/img/VisitOurLights.png" data-price="30">Lighthouse Association - Visit Our Lights</span> 
 <span data-code="LDR" data-image="/images/img/LivetheDream.png" data-price="30">Live the Dream</span> 
 <span data-code="AHR" data-image="/images/img/PoliceAthleticLeague.png" data-price="25">Police Athletic League</span> 
 <span data-code="SAR" data-image="/images/img/SharetheRoad.png" data-price="20">Share the Road</span> 
 <span data-code="SPR" data-image="/images/img/SpecialOlympics.png" data-price="20">Special Olympics</span> 
 <span data-code="EDR" data-image="/images/img/SupportEducation.png" data-price="25">Support Education</span> 
 <span data-code="SYR" data-image="/images/img/SupportSoccer.png" data-price="30">Support Soccer</span> 
 <span data-code="SOR" data-image="/images/img/USOlympic.png" data-price="20">US Olympic</span> 

 </div> 

 <div id="Health Interest_subcategories" class="dropdown-subcategory"> 
 <span data-code="RXR" data-image="/images/img/AmericanRedCross.png" data-price="30">American Red Cross</span> 
 <span data-code="CSR" data-image="/images/img/ChooseLife.png" data-price="25">Choose Life</span> 
 <span data-code="DOR" data-image="/images/img/DonateOrgans.png" data-price="30">Donate Organs</span> 
 <span data-code="CRR" data-image="/images/img/EndBreastCancer.png" data-price="30">End Breast Cancer</span> 
 <span data-code="HOR" data-image="/images/img/Hospice.png" data-price="30">Hospice</span> 
 <span data-code="MJR" data-image="/images/img/MoffittCancerCenter.png" data-price="25">Moffitt Cancer Center</span> 
 <span data-code="VIR" data-image="/images/img/StateofVision.png" data-price="30">State of Vision</span> 
 <span data-code="SDR" data-image="/images/img/StopHeartDisease.png" data-price="30">Stop Heart Disease</span> 
 <span data-code="ASR" data-image="/images/img/SupportAutismPrograms.png" data-price="30">Support Autism Programs</span> 
 </div> 
 <div id="Family / Kids_subcategories" class="dropdown-subcategory"> 
 <span data-code="SCR" data-image="/images/img/BoyScouts.png" data-price="25">Boy Scouts</span> 
 <span data-code="CAR" data-image="/images/img/StopChildAbuse.png" data-price="30">Stop Child Abuse</span> 
 <span data-code="FJR" data-image="/images/img/FamilyFirst.png" data-price="30">Family First</span> 
 <span data-code="FUR" data-image="/images/img/FamilyValues.png" data-price="30">Family Values</span> 
 <span data-code="CHR" data-image="/images/img/InvestinChildren.png" data-price="25">Invest in Children</span> 
 <span data-code="KKR" data-image="/images/img/KeepKidsDrugFree.png" data-price="30">Keep Kids Drug Free</span> 
 <span data-code="KDR" data-image="/images/img/KidsDeserveJustice.png" data-price="30">Kids Deserve Justice</span> 
 <span data-code="LKR" data-image="/images/img/LaurensKids.png" data-price="30">Lauren's Kids</span> 
 <span data-code="PMR" data-image="/images/img/ParentsMakeaDifference.png" data-price="30">Parents Make a Difference</span> 
 </div> 

 <div id="American Heroes_subcategories" class="dropdown-subcategory"> 
 <span data-code="SPRT01" data-image="" data-price="34.00">Sports 01</span> 
 <span data-code="SPRT02" data-image="" data-price="35.00">Sports 02</span> 
 <span data-code="SPRT03" data-image="" data-price="36.00">Sports 03</span> 
 </div> 

 <div id="Professional Sports_subcategories" class="dropdown-subcategory"> 
 <span data-code="MAR" data-image="/images/img/FloridaMarlins.png" data-price="30">Florida Marlins</span> 
 <span data-code="PTR" data-image="/images/img/FloridaPanthers.png" data-price="30">Florida Panthers</span> 
 <span data-code="JJR" data-image="/images/img/JacksonvilleJaguars.png" data-price="30">Jacksonville Jaguars</span> 
 <span data-code="MDR" data-image="/images/img/MiamiDolphins.png" data-price="30">Miami Dolphins</span> 
 <span data-code="MHR" data-image="/images/img/MiamiHeat.png" data-price="30">Miami Heat</span> 
 <span data-code="OMR" data-image="/images/img/OrlandoMagic.png" data-price="30">Orlando Magic</span> 
 <span data-code="BBR" data-image="/images/img/TampaBayBucs.png" data-price="30">Tampa Bay Bucs</span> 
 <span data-code="DRR" data-image="/images/img/TampaBayRays.png" data-price="30">Tampa Bay Rays</span> 
 <span data-code="TBR" data-image="/images/img/TampaBayLightning.png" data-price="30">Tampa Bay Lightning</span> 
 <span data-code="NZR" data-image="/images/img/Nascar.png" data-price="30">Nascar</span> 
 </div> 
 <div id="Collegiate_subcategories" class="dropdown-subcategory"> 
 <span data-code="ENV01" data-image="" data-price="31.00">Environment 01</span> 
 <span data-code="ENV02" data-image="" data-price="32.00">Environment 02</span> 
 <span data-code="ENV03" data-image="" data-price="33.00">Environment 03</span> 
 </div> 

 <div id="Motorcycle_subcategories" class="dropdown-subcategory"> 
 <span data-code="MYR" data-image="/images/img/MotorcycleSpecialty.png" data-price="22">Motorcycle Specialty</span> 
 <span data-code="MUR" data-image="/images/img/MotorcylceUnderage.png" data-price="22">Motorcylce Underage</span> 
 </div>




<!-- BOOTSTRAP MODAL FOR SPECIAL PLATES -->
<div class="modal fade" id="modal_special" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">
        	<span aria-hidden="true">&times;</span><span class="sr-only">Close</span>
         </button>
        <h4 class="modal-title" id="myModalLabel">Specialty Plate</h4>
      </div>
      <div class="modal-body">
        ...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
          <button type="button" class="btn btn-primary accept">Accept</button>
      </div>
    </div>
  </div>
</div>

最佳答案

好的,所以我明白您要做什么了,您正在尝试创建一个奇特的选择窗口,而不是尝试使用自定义“下拉”菜单。所以我迎接挑战并为您创建了一个模型。

YOU CAN REVIEW THE MOCKUP DEMO ON JSFIDDLE

基本思想是将您的自定义下拉列表转换为自定义应用程序。

首先,我转换了你所有的<optgroup></optgroup>为这种格式:

<div class="licenseSection" id="licenseSection0">
    <!-- buttons for this section go here -->
</div>

和每一个 <option></option>标签已转换为:

<div class="licenseButton" data-price="30" data-code="2" data-name="Aquaculture">
    <div class="selectedLicenseFlag"></div>
    <div class="licenseImage">
        <img src="/images/img/Aquaculture.png" alt="Aquaculture" />
    </div>
    <div class="licenseInfoName">Aquaculture</div>
    <div class="licenseInfoPrice">$30</div>
</div>

现在,由于每个“类别”现在都属于自己的 licenseSection div,这只是让 jQuery 显示或隐藏相应部分的问题。像这样:

$("ul.SL_category_buttons li").click(function(){

    var buttonIndex = $(this).index();

    // Handle the button highlighting if the button is already selected
    if ($(this).hasClass("selectedLicenseCategory") == false){
        $("ul.SL_category_buttons li").removeClass("selectedLicenseCategory");
        $("ul.SL_category_buttons li").removeClass("hoverLicenseCategory");
        $(this).addClass("selectedLicenseCategory");

        // Reveal the category options
        revealLicenseCategoryPageAtIndex(buttonIndex);  
    }   
});

function revealLicenseCategoryPageAtIndex(index){
    $(".licenseSection").fadeOut().end(
        $(".licenseSection").eq(index).delay(300).fadeIn()
    );
}

此演示的一些功能包括:

  • 许可证缩略图出现时会显示许可证价格 徘徊。
  • 所选许可证显示在许可证选择器下方,因此用户可以 在接受之前保持审查
  • 整个模态窗口是一个引导组件,因此可以很容易地 打开和关闭。


如何将此选择器集成到您的应用程序中:


<强>1。启动模态窗口:

// Option #01
$('#modal_special').modal('show');

// Option #02
// Assign a button with the id of launchLicenseModalSelect to reach this code
$("#launchLicenseModalSelect").click(function(){
    $('#modal_special').modal('show');  
});


<强>1。获取用户选择的数据:

此应用程序设置一个名为 selectedLicense 的变量跟踪选择了哪个许可证,因此当用户单击表单上的“接受”按钮时,您可以使用 selectedLicense 做任何您想做的事情对象(更新您的 UI、更新您的计算等):

$(".accept").click(function(){
    // Hide the modal
    $('#modal_special').modal('hide');

    // Access the selectedLicense object.
    console.log("The following license was selected:", selectedLicense);
    alert("The following license was accepted:\n\n"+selectedLicense.name+" $"+selectedLicense.price);
});

这是基本的想法。 Please review the JSFiddle demo ,并随时提出您可能有的任何问题。

希望这对您有所帮助!

关于javascript - jQuery 弹出窗口 - 菜单/图像设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26726585/

相关文章:

javascript - Selenium 3 : JavascriptExecutor returns ReferenceError

javascript - 关闭后停止滚动动画

javascript - 如何添加监听空格键的按键事件处理程序?

html - 如何内联 2 个表单输入

javascript - 第一个分号是什么意思? ";( function( ) { } ) ( ); "

javascript - Ruby on Rails - 将文本字段与选择结合起来?

javascript - 使用 ID 为段落内的字符串设置样式

javascript - 如何在 jQuery 中粘贴时保持文本格式?

javascript - 当您在 Select 脚本中调用 Knockout 计算的 Var 时,如何定义它?

html - 页面内容不会居中