我有一张这样的图片(demo),并且可以通过鼠标滚轮上下缩放。但是它只能从左上角进行缩放...
我该如何尝试使其从鼠标光标点缩放(例如example)。 另外,我需要具有图片边界,而不是像这个例子那样无边。感谢您的任何回答或建议。
HTML,css
//Html
<div id="picture"></div>
//css
#picture {
width: 340px;
height: 150px;
overflow: auto;
}
JavaScript
createSVG = function () {
var svg = d3.select('#picture')
.append('svg')
.attr('width', rw)
.attr('height', rh)
.style('border', '1px solid #000');
svg.append('svg:image')
.attr('xlink:href', 'http://www.iconpng.com/png/beautiful_flat_color/computer.png')
.attr('width', rw)
.attr('height', rh);
}
//Init (Original size)
var Picture_w = 340;
var Picture_h = 150;
value = 96; //(scaling ratio)
rw = Picture_w * value / 100;
rh = Picture_h * value / 100;
createSVG();
// When change scaling ratio, RE createSVG();
changeSize = function () {
d3.select('svg').remove();
rw = Picture_w * value / 100;
rh = Picture_h * value / 100;
createSVG();
};
//mousewheel (Chrome or IE)
$('#picture').on('mousewheel DOMMouseScroll', function (e) {
e.preventDefault();
if (e.type == 'mousewheel') {
if (e.originalEvent.wheelDelta > 0) {
value += 2;
if (value > 500) {
value = 500;
}
changeSize();
// console.log(e.originalEvent.wheelDelta);
}
else {
value -= 2;
if (value < 5) {
value = 5;
}
changeSize();
// console.log("w" + e.originalEvent.wheelDelta);
}
}
});
答案 0 :(得分:0)
我不确定您在看什么,但是我用您的代码创建了一个D3 zoom,并使用Mike Bostock’s Block方法实现了缩放。
想法是创建缩放行为并将其应用于指定的选择/元素。
var parent = d3.select("#picture");
var zoom = d3.zoom()
.scaleExtent([0.5, 8])
.on("zoom", zoomed);
parent.call(zoom);
function zoomed() {
parent.select("svg").attr("transform", d3.event.transform);
}
function reset() {
parent.transition()
.duration(750)
.call(zoom.transform, d3.zoomIdentity);
}
#picture {
width: 340px;
height: 150px;
overflow: auto;
}
.parent {
border : 1px solid #000;
}
<script src="//d3js.org/d3.v5.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<div id="picture">
<svg width="330" height="140" class="parent"><g class="image"><image xlink:href="http://www.iconpng.com/png/beautiful_flat_color/computer.png" width="330" height="140" class="pictureWrapper"></image></g></svg>
</div>
<button onclick="reset()">Reset</button>