How do you swap DIVs on mouseover (jQuery)?

后端 未结 5 1122
天涯浪人
天涯浪人 2020-12-03 14:05

This most be the second most simple rollover effect, still I don\'t find any simple solution.

Wanted: I have a list of items and a corresponding lis

相关标签:
5条回答
  • 2020-12-03 14:25

    Rather than displaying all slides when JS is off (which would likely break the page layout) I would place inside the switch LIs real A links to server-side code which returns the page with the "active" class pre-set on the proper switch/slide.

    $(document).ready(function() {
      switches = $('#switches > li');
      slides = $('#slides > div');
      switches.each(function(idx) {
        $(this).data('slide', slides.eq(idx));
      }).hover(
        function() {
          switches.removeClass('active');
          slides.removeClass('active');
          $(this).addClass('active');
          $(this).data('slide').addClass('active');
        });
    });
    #switches .active {
      font-weight: bold;
    }
    #slides div {
      display: none;
    }
    #slides div.active {
      display: block;
    }
    <html>
    
    <head>
    
      <title>test</title>
    
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
      <script type="text/javascript" src="switch.js"></script>
    
    </head>
    
    <body>
    
      <ul id="switches">
        <li class="active">First slide</li>
        <li>Second slide</li>
        <li>Third slide</li>
        <li>Fourth slide</li>
      </ul>
      <div id="slides">
        <div class="active">Well well.</div>
        <div>Oh no!</div>
        <div>You again?</div>
        <div>I'm gone!</div>
      </div>
    
    </body>
    
    </html>

    0 讨论(0)
  • 2020-12-03 14:29

    Here's my light-markup jQuery version:

    <script type="text/javascript" src="jquery.js"></script>
    <script type="text/javascript">
    function switchTo(i) {
      $('#switches li').css('font-weight','normal').eq(i).css('font-weight','bold');
      $('#slides div').css('display','none').eq(i).css('display','block');
    }
    $(document).ready(function(){
      $('#switches li').mouseover(function(event){
        switchTo($('#switches li').index(event.target));
      });
      switchTo(0);
    });
    </script>
    <ul id="switches">
      <li>First slide</li>
      <li>Second slide</li>
      <li>Third slide</li>
      <li>Fourth slide</li>
    </ul>
    <div id="slides">
      <div>Well well.</div>
      <div>Oh no!</div>
      <div>You again?</div>
      <div>I'm gone!</div>
    </div>
    

    This has the advantage of showing all the slides if the user has javascript turned off, uses very little HTML markup and the javascript is pretty readable. The switchTo function takes an index number of which <li> / <div> pair to activate, resets all the relevant elements to their default styles (non-bold for list items, display:none for the DIVs) and the sets the desired list-item and div to bold and display. As long as the client has javascript enabled, the functionality will be exactly the same as your original example.

    0 讨论(0)
  • 2020-12-03 14:31

    Here's the jQuery version:

    <script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.2.6.min.js"></script>
    <script type="text/javascript">
    $(function () {
        $("#switches li").mouseover(function () {
            var $this = $(this);
            $("#slides div").hide();
            $("#slide" + $this.attr("id").replace(/switch/, "")).show();
            $("#switches li").css("font-weight", "normal");
            $this.css("font-weight", "bold");
        });
    });
    </script>
    
    <ul id="switches">
      <li id="switch1" style="font-weight:bold;">First slide</li>
      <li id="switch2">Second slide</li>
      <li id="switch3">Third slide</li>
      <li id="switch4">Fourth slide</li>
    </ul>
    <div id="slides">
      <div id="slide1">Well well.</div>
      <div id="slide2" style="display:none;">Oh no!</div>
      <div id="slide3" style="display:none;">You again?</div>
      <div id="slide4" style="display:none;">I'm gone!</div>
    </div>
    
    0 讨论(0)
  • 2020-12-03 14:35

    The only thing that's wrong with this code (at least to me) is that you're not using a loop to process all elements. Other than that, why not to it like that?

    And with loop, I mean grabbing the container element via a JQuery and iterating over all child elements – basically a one-liner.

    0 讨论(0)
  • 2020-12-03 14:43
    <html>
    <head>
    <script type="text/javascript" src="jquery.js"></script>
    <script type="text/javascript">
    
    $(document).ready(
      function(){
        $( '#switches li' ).mouseover(
          function(){
            $( "#slides div" ).hide();
            $( '#switches li' ).css( 'font-weight', 'normal' );
            $( this ).css( 'font-weight', 'bold' );
            $( '#slide' + $( this ).attr( 'id' ).replace( 'switch', '' ) ).show();
          }
        );
      }
    );
    
    </script>
    </head>
    <body>
    <ul id="switches">
      <li id="switch1" style="font-weight:bold;">First slide</li>
      <li id="switch2">Second slide</li>
      <li id="switch3">Third slide</li>
      <li id="switch4">Fourth slide</li>
    </ul>
    <div id="slides">
      <div id="slide1">Well well.</div>
      <div id="slide2" style="display:none;">Oh no!</div>
      <div id="slide3" style="display:none;">You again?</div>
      <div id="slide4" style="display:none;">I'm gone!</div>
    </div>
    </body>
    </html>
    
    0 讨论(0)
提交回复
热议问题