通过滚动更改元素比例(按滚动缩放)

时间:2015-08-20 10:28:18

标签: javascript jquery html css transform

根据其他用户的建议,我发布了一个新问题,以便寻求有关扩展问题的帮助,而不是尝试完成已有的问题: similar question。 我试图通过滚动页面上的特定元素(图像)来设置缩放。 起初我使用了transform:scale(number);但它似乎弄乱了溢出阻止完全滚动图像(左侧图像的一部分,顶部隐藏)。 我找不到能够完全滚动图像并在鼠标位置设置变换原点的方法。 我目前正在尝试通过将图像放在div容器中并更改容器宽度/高度来找到解决方法。它看起来工作得很好,唯一的问题是设置div的偏移量以匹配鼠标位置(设置transform-origin做得很好)...

这是我的代码,两种方法都可以放大... mouseWheel js是来自一些随机网站上有一个演示,我不认为这是最新版本。 正如你所看到的,我可以放大和缩小,但是我无法完全滚动对象,我已经通过将对象放在另一个div中来修复它,但它会使位置混乱,所以听起来不像一个解决方案......

#container1 {
  position: fixed;
  width: 300px;
  height: 200px;
  border: 1px solid #000000;
  left: 0px;
  top: 0px;
  margin-left: 10px;
  margin-top: 10px;
  overflow: auto;
  display: block;
  text-align: center;
}
#object1 {
  position: absolute;
  width: 100px;
  height: 100px;
  display: inline-block;
  background-color: rgba(255, 0, 255, 0.45);
  margin: auto;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  border-radius: 25px;
}
#container2 {
  position: fixed;
  width: 300px;
  height: 200px;
  border: 1px solid #000000;
  left: 0px;
  top: 0px;
  margin-left: 330px;
  margin-top: 10px;
  overflow: auto;
  display: block;
  text-align: center;
}
#object2 {
  position: absolute;
  width: 100px;
  height: 100px;
  display: inline-block;
  background-color: rgba(0, 0, 255, 0.45);
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  margin: auto;
  border-radius: 25px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://owlcarousel.owlgraphic.com/assets/vendors/jquery.mousewheel.min.js"></script>
<div id="container1">

  <div id="object1"></div>

</div>

<div id="container2">

  <div id="object2"></div>

</div>

<script type="text/javascript">
  var scale = 1;
  var object2 = document.getElementById("object2");
  $('#object2').on("mousewheel", function(event) {
    scale += event.deltaY < 1 ? -0.3 : 0.3;
    scale = scale < 1 ? 1 : scale;
    scale = scale > 5 ? 5 : scale;
    object2.style.transform = "scale(" + scale + ")";
    object2.style.transformOrigin = event.offsetX + "px " + event.offsetY + "px";
    event.preventDefault();
  });
  var scale2 = 1;
  var object1 = document.getElementById("object1");
  $('#object1').on("mousewheel", function(event) {
    scale2 += event.deltaY < 1 ? -0.3 : 0.3;
    scale2 = scale2 < 1 ? 1 : scale2;
    scale2 = scale2 > 5 ? 5 : scale2;
    object1.style.width = (100 * scale2) + "px";
    object1.style.height = (100 * scale2) + "px";
    event.preventDefault();
  });
</script>

这与容器div的内容相同,只是为了让你看到它如何弄乱这个位置:

#container1 {
  position: fixed;
  width: 300px;
  height: 200px;
  border: 1px solid #000000;
  left: 0px;
  top: 0px;
  margin-left: 10px;
  margin-top: 10px;
  overflow: auto;
  display: block;
  text-align: center;
}
#objectContainer {
  position: relative;
  width: 100px;
  height: 100px;
  margin: auto;
  bottom: 0;
  right: 0;
}
#object1 {
  position: absolute;
  width: auto;
  height: auto;
  max-width: 100%;
  max-height: 100%;
  display: inline-block;
  background-color: rgba(255, 0, 255, 0.45);
  margin: auto;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  border-radius: 25px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://owlcarousel.owlgraphic.com/assets/vendors/jquery.mousewheel.min.js"></script>
<div id="container1">
  <div id="objectContainer">
    <div id="object1"></div>
  </div>
</div>
<script type="text/javascript">
  var scale2 = 1;
  var container1 = document.getElementById("objectContainer");
  $('#object1').on("mousewheel", function(event) {
    scale2 += event.deltaY < 1 ? -0.3 : 0.3;
    scale2 = scale2 < 1 ? 1 : scale2;
    scale2 = scale2 > 5 ? 5 : scale2;
    container1.style.width = (100 * scale2) + "px";
    container1.style.height = (100 * scale2) + "px";
    event.preventDefault();
  });
</script>

0 个答案:

没有答案