Применяется к d3.js v4
Это похоже на ответ davcs86 , но он повторно использует начальное преобразование и реализует функцию масштабирования.
// Initial transform to apply
var transform = d3.zoomIdentity.translate(200, 0).scale(1);
var zoom = d3.zoom().on("zoom", handleZoom);
var svg = d3.select("body")
.append('svg')
.attr('width', 800)
.attr('height', 300)
.style("background", "red")
.call(zoom) // Adds zoom functionality
.call(zoom.transform, transform); // Calls/inits handleZoom
var zoomable = svg
.append("g")
.attr("class", "zoomable")
.attr("transform", transform); // Applies initial transform
var circles = zoomable.append('circle')
.attr("id", "circles")
.attr("cx", 100)
.attr("cy", 100)
.attr('r', 20);
function handleZoom(){
if (zoomable) {
zoomable.attr("transform", d3.event.transform);
}
};
См. его в действии: ссылка jsbin
no-conversion
действительно означает, что буфер содержит лежащие в основе необработанные байты , а не предполагаемые символы. И когда вы меняете систему кодирования на latin-1, вы не изменяете содержимое буфера, вы просто сообщаете Emacs, что намереваетесь использовать latin-1, чтобы сохранить буфер в файл. Поэтому он жалуется на все байты, не относящиеся к ASCII, потому что latin-1 не знает, как кодировать эти байты (он только кодирует символы, которые они должны представлять, то есть кодирует их в эти байты).
Вместо этого вы хотите перезагрузить ваш файл, используя систему кодирования latin-1
(вместо no-conversion
), которую вы можете сделать с помощью C-x RET r latin-1 RET
.
Может быть, Emacs должен предложить пользователю вернуть буфер, когда буфер не модифицирован, а вы переходите с no-conversion
на что-то другое! Я предлагаю вам M-x report-emacs-bug
объяснить, почему вы нашли интерфейс запутанным.