jQuery - 根据元素的鼠标悬停位置向右或向左旋转Y轴

3

这里有一个与我的代码相关的 JSFiddle - https://jsfiddle.net/agon024/o9sa7nyh/5/

:hover{
  transform: perspective(800px) rotateY(25deg);
  transition-timing-function: ease-in;
  transition: all, 0.5s;
}

我想做的是让我的div元素在鼠标悬停在图像左侧或右侧时旋转Y轴25度或-25度。如您在fiddle中所见,当您悬停在上面时,它只会旋转25度。我该如何使用jQuery实现这一点?我找到了这个类似于我要寻找的内容的fiddle(http://jsfiddle.net/HeFqh/11/),但我需要它旋转Y轴。非常感谢任何帮助。
2个回答

1
你可以像这样做:


$( ".billMurray img" ).mousemove(
  function(e) {
 var offset = $(this).offset();
  var relativeX = (e.pageX - offset.left);
if(relativeX< $(this).width()/2) {

 $( this ).addClass( "hover-left" );
  $( this ).removeClass( "hover-right" );
   $(this).removeClass('start');
}
else {
 $( this ).addClass( "hover-right" );
  $( this ).removeClass( "hover-left" );
     $(this).removeClass('start');
}



  }
);

$( ".billMurray img" ).mouseleave(function(){
 $( this ).removeClass( "hover-right" );
  $( this ).removeClass( "hover-left" );
  $(this).addClass('start');
});

所以,思路是:先找到图像的左右鼠标位置(首先获取中心):https://css-tricks.com/snippets/jquery/get-x-y-mouse-coordinates/,然后添加和删除适当的类。'start'类存在是为了当鼠标离开图像时实现无缝过渡...
带有稍微修改的CSS的演示:https://jsfiddle.net/o9sa7nyh/6/

0

在每个hover事件中,计算父元素的宽度;计算元素沿着x轴的起始位置并将其存储在数组中;检查当前event.clientX是否小于当前元素位置加上当前元素位置除以父容器内元素的.length。如果true,则鼠标指针位于元素左侧,在rotate()函数中设置-符号;否则,鼠标指针位于元素右侧,在rotate()函数中设置+符号。

var elems = $(".billMurray").hover(function(e) {
  var len = elems.length;
  // parent `.width()` divided by selected element `.length`
  var width = elems.parent().width() / len;
  // calculate beginning position of each element
  var res = $.map(Array(len), function(_, i) {
    return !i ? width / 2 : width * i
  });
  // mouse position
  var x = e.clientX;
  // select array index using element `.index()`
  var index = elems.index(this);
  // check if `x` is less than start of element
  // position plus element position divided by 
  // selected element collection `.length` along x axis
  // if `true` set sign to `-`, else set sign to `+`
  var sign = x < res[index] + (res[index] / len) ? "-" : "+";
  $(this).css("transform", "perspective(800px) rotateY(" + sign + "25deg)")
}, function() {
  $(this).css("transform", "perspective(800px) rotateY(0deg)")
})
.philWrap {
  margin-top: 50px;
}
.billMurray {
  width: 25%;
  float: left;
  text-align: center;
  -webkit-transform: perspective(800px) rotateY(0deg);
  -moz-transform: perspective(800px) rotateY(0deg);
  -o-transform: perspective(800px) rotateY(0deg);
  -ms-transform: perspective(800px) rotateY(0deg);
  transform: perspective(800px) rotateY(0deg);
  -webkit-transition-timing-function: ease-in;
  transition-timing-function: ease-in;
  -moz-transition: all, 0.5s;
  -o-transition: all, 0.5s;
  -webkit-transition: all, 0.5s;
  transition: all, 0.5s;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="philWrap">
  <div class="billMurray"><img src="http://fillmurray.com/200/300" alt=""></div>
  <div class="billMurray"><img src="http://fillmurray.com/g/200/300" alt=""></div>
  <div class="billMurray"><img src="http://fillmurray.com/200/300" alt=""></div>
  <div class="billMurray"><img src="http://fillmurray.com/g/200/300" alt=""></div>
</div>

jsfiddle https://jsfiddle.net/o9sa7nyh/10/

可以翻译为:

jsfiddle {{link1:https://jsfiddle.net/o9sa7nyh/10/}}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接