我正在使用答案here中发布的代码来使用mousedown平移大图像,该图像位于具有透明度的另一图像下方的div中。无需缩放。代码对我来说很好,除了平移从大图像的左上角开始,我希望它从中心点开始,然后向各个方向平移。我不太了解所涉及的计算,所以非常感谢有关如何解决它的一些指示,或者我需要做些什么来指定起点。
jQuery是:
var clicking = false;
var previousX;
var previousY;
$("#scroll").mousedown(function(e) {
e.preventDefault();
previousX = e.clientX;
previousY = e.clientY;
clicking = true;
});
$(document).mouseup(function() {
clicking = false;
});
$("#scroll").mousemove(function(e) {
if (clicking) {
e.preventDefault();
var directionX = (previousX - e.clientX) > 0 ? 1 : -1;
var directionY = (previousY - e.clientY) > 0 ? 1 : -1;
$("#scroll").scrollLeft($("#scroll").scrollLeft() + (previousX - e.clientX));
$("#scroll").scrollTop($("#scroll").scrollTop() + (previousY - e.clientY));
previousX = e.clientX;
previousY = e.clientY;
}
});
$("#scroll").mouseleave(function(e) {
clicking = false;
});
html是:
<div id="scroll">
<img src="sampleimg.jpg" class="background" />
</div>
<img src="sampleoverlay.png" class="overlay" />
css是:
#scroll {
width: 580px;
height: 620px;
overflow: hidden;
}
.background {
width: 100%;
height: 100%;
}
.overlay {
width: 100%;
height: 100%;
position: absolute;
pointer-events: none;
}
道歉,如果这是非常明显的 - 我找不到任何可以回答我的问题,但可能没有找到正确的事情。
答案 0 :(得分:3)
由于您引用的答案使用带overflow:hidden
的div上的滚动,您只需将div滚动到正确的起始位置即可。您可以通过从div的宽度减去图像的宽度来计算它。这为div提供了两个侧的边距空间,因此我们需要将其除以2。
使用高度来查找上边距,然后使用jQuery的scrollTop()
和scrollLeft()
简单地将div滚动到该位置。
答案 1 :(得分:0)
我相信你可以通过使用触摸事件使这项工作适用于移动设备。我不确定是否需要touchend和等效的mouseleave,但它会是这样的:
$(document).ready(function(){
var $container = $("#scroll");
var $img = $("#scroll img");
var cHeight = $container.height();
var cWidth = $container.width();
var iHeight = $img.height();
var iWidth = $img.width();
var top = (iHeight - cHeight) / 2;
var left = (iWidth - cWidth) / 2;
$container.scrollLeft(left);
$container.scrollTop(top);
});
var clicking = false;
var previousX;
var previousY;
$("#scroll").bind('touchstart', function(e) {
e.preventDefault();
previousX = e.touches[0].clientX;
previousY = e.touches[0].clientY;
clicking = true;
});
/* $(document).bind('touchend', function() {
clicking = false;
}); */
$("#scroll").bind('touchmove', function(e) {
if (clicking) {
e.preventDefault();
var directionX = (previousX - e.touches[0].clientX) > 0 ? 1 : -1;
var directionY = (previousY - e.touches[0].clientY) > 0 ? 1 : -1;
container.scrollLeft(container.scrollLeft() + (previousX - e.touches[0].clientX));
container.scrollTop(container.scrollTop() + (previousY - e.touches[0].clientY));
previousX = e.touches[0].clientX;
previousY = e.touches[0].clientY;
}
});
jsFiddle (小提琴不起作用,除非你能以某种方式使它模仿移动 - 我不知道如何)