webentwicklung-frage-antwort-db.com.de

Erweitern/verkleinern Sie div mit HQuick mit jQuery

Ich suche nach einem jQuery-Plugin, um div-Elemente zu erweitern, um deren Überlauf (falls vorhanden) im Hover anzuzeigen. Illustration:

enter image description here

Das Plugin sollte mit relativ positionierten div's funktionieren (was, wie ich vermute, eine Kopie der div erstellt, seine Position auf absolut setzt und dann herausfindet, wo sie platziert werden soll).

Gibt es da draußen schon ein solches Plugin?

22
Max

Sie benötigen kein Plugin ..__ Fügen Sie einfach die richtige css hinzu und verwenden Sie jQuery animate: 

$div
.on('mouseenter', function(){
    $(this).animate({ margin: -10, width: "+=20", height: "+=20" });
})
.on('mouseleave', function(){
    $(this).animate({ margin: 0, width: "-=20", height: "-=20" });
})​

Demo hier

26
tborychowski

Hier fehlen die Bilder ... aber hier habe ich es vor einigen Jahren gemacht. Die grundlegende Theorie ist, dass alle Bilder/divs, was auch immer, absolut sind, innerhalb ihres eigenen relativen Bereichs. Ich animiere dann die left & top Position sowohl -negatively. Dadurch ragen sie über die umliegenden Boxen hinaus und sehen aus, als würden sie herausspringen. (Natürlich müssen Sie auch sicherstellen, dass der Z-Index dieses Index höher ist als der um ihn herum).

jsFiddle DEMO

$(".img a img").hover(function() {
    $(this).closest(".img").css("z-index", 1);

    // this is where the popping out effect happens
    $(this).animate({ height: "200", width: "200", left: "-=55", top: "-=55" }, "fast");

}, function() {
    $(this).closest(".img").css("z-index", 0);
    $(this).animate({ height: "90", width: "90", left: "+=55", top: "+=55" }, "fast");
});​

Die Stile, die ich für diese zwei Dinge habe, sind:

.img { 
   position:relative; 
   z-index:0px;  
}

.img a img { 
   position:absolute;
   border:1px #1b346c solid; 
   background:#f1f1f1; 
   width:90px; 
   height:90px; 
}

danke an @MarkPieszak. Für dynamisch erzeugte Elemente verwenden

$(document).on({
  mouseenter: function () {
    $(this).animate({ height: "200", width: "200", left: "-=55", top: "-=55" }, "fast");
  },
  mouseleave: function () {
    $(this).animate({ height: "90", width: "90", left: "+=55", top: "+=55" }, "fast");
  }    
}, '.img a img');

.hover() funktioniert nur für statische Elemente. mehr hier

1
the_ousek

Wenn es sich um Text handelt, ist es etwas komplizierter ...

Ich benutze es so:

$('.floating').mouseenter(function(){
  const $this = $(this);
  const dimension = $this.data('dimension');
  const ratioEnlarged = 2;

  const tempElement = $this.clone();
  tempElement.appendTo('body');
  tempElement.css({
    width: dimension.width,
    height: dimension.height
  });

  if(tempElement.is(':offscreen')){
    // Change this to animate if you want it animated.
    $this.css({
      'margin-left': -dimension.width * ratioEnlarged/2,
      'margin-top': -dimension.height * ratioEnlarged/4,
      'font-size': ratioEnlarged + 'em',
      width: dimension.width * ratioEnlarged,
      height: dimension.height * ratioEnlarged
    });
  } else {
    $this.css({
      'margin-left': -dimension.width * ratioEnlarged/4,
      'margin-top': -dimension.height * ratioEnlarged/4,
      'font-size': ratioEnlarged + 'em',
      width: dimension.width * ratioEnlarged,
      height: dimension.height * ratioEnlarged
    });
  }

  tempElement.remove();
});

$('.floating').mouseleave(function(event) {
  const $this = $(this);
  const dimension = $this.data('dimension');

  if(!$this.hasClass('context-menu-active')){
    $this.css({
      margin: 0,
      'font-size': '1em',
      width: dimension.width,
      height: dimension.height
    });
  }
});
0
Polv

Sie können dies eigentlich vollständig mit css machen, dies ist ein Snipet von einer meiner Websites, und es ist zu faul, um es zu bearbeiten, aber Sie haben die Idee: 

<ul class="hover">
  <li style="margin-top:40px;"">
   <a href=""><img src="images/Home/Home.jpg" alt="home" style="width:130px; height:100px;"/>
   <img src="images/Home/Home.jpg" alt="home" class="preview" style="width:180px; height:150px;"/></a>
  </li>
  <li style="margin-left:55px; margin-top:-20px;">
   <a href=""><img src="images/About/About.jpg" alt="About The Author" style="width:200px; height:200px;"/>
   <img src="images/About/About.jpg" alt="About The Author" class="preview" style="width:250px; height:250px;"/></a>
  </li>
</ul>

css:

/* begin hover */

.hover{
cursor: default;
list-style: none;
}

.hover a .preview{
display: none;
}

.hover a:hover .preview{
display: block;
position: absolute;
top: -33px;
left: -45px;
z-index: 1;
}

.hover img{
background: white;
border-color: black;
border-style: solid;
border-width: 4px;
color: inherit;
padding: 2px;
vertical-align: top;
-moz-border-radius: 15px;
border-radius: 15px;
}

.hover li{
background: black;
border-color: black;
border-style: solid;
border-width: 1px;
color: inherit;
display: block;
float: left;
margin: 3px;
padding: 5px;
position: relative;
}

.hover .preview{
border-color:black;
border-width:8px;
border-stle:solid;
}

li{
-moz-border-radius: 15px;
border-radius: 15px;
}

es gibt einige nicht benötigte Stile, aber auch hier bekommen Sie die Idee. Im Grunde zeigen Sie nur ein Bild über dem Original, im Schwebeflug

0
Nick