# riscv asm compare viewer
既然能輸出svg向量檔,那麼對比當中的html是否有更方便的方式呢,來寫個html,主要對照vscode可以實現拖拉加載svg圖檔,以及卷軸同步功能,以便找出asm的不同.
![](https://i.imgur.com/LGwddB3.png)
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SVG Viewer</title>
</head>
<body>
<div id="app">
<div class="scroll-left" id="left">
<div class="drop-zone"><span>圖檔拖放區</span></div>
<div data-bind="foreach: images" class="img-list">
<img data-bind="attr: { src: dataUri }, click: $root.currImage" class="thumbnail" />
</div>
<fieldset class="display" data-bind="with: currImage">
<legend>
<div class="center">
<span style="font-size:50px;" data-bind="text: name"></span>
</br>
<span style="font-size:50px;" data-bind=" text: size"></span>
</div>
</legend>
<object data-bind="attr: { data: dataUri }" type="image/svg+xml"></object>
</fieldset>
</div>
<div class="scroll-right" id="right">
<div class="drop-zone2"><span>圖檔拖放區</span></div>
<div data-bind="foreach: images" class="img-list2">
<img data-bind="attr: { src: dataUri }, click: $root.currImage2" class="thumbnail" />
</div>
<fieldset class="display2" data-bind="with: currImage2">
<legend>
<div class="center">
<span style="font-size:50px;" data-bind="text: name"></span>
</br>
<span style="font-size:50px;" data-bind=" text: size"></span>
</div>
</legend>
<object data-bind="attr: { data: dataUri }" type="image/svg+xml"></object>
</fieldset>
</div>
</div>
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.9.1.js "></script>
<script src="http://ajax.aspnetcdn.com/ajax/knockout/knockout-3.0.0.js "></script>
<script src="http://cdn.kendostatic.com/2013.3.1119/js/kendo.core.min.js"></script>
<script>
$(function () {
var $drop = $(".drop-zone");
var $drop2 = $(".drop-zone2");
//抑制瀏覽器原有的拖拉操作效果
function stopEvent(evt) {
evt.stopPropagation();
evt.preventDefault();
}
$drop.bind("dragover", function (e) {
//滑鼠經過上方時加入特效
stopEvent(e);
$(e.target).addClass("hover");
}).bind("dragleave", function (e) {
//滑鼠移開時移除特效
stopEvent(e);
$(e.target).removeClass("hover");
}).bind("drop", function (e) {
//拖放操作完成事件
stopEvent(e);
$(e.target).removeClass("hover");
//由dataTransfer.files取得檔案資訊
var files = e.originalEvent.dataTransfer.files;
var imageFiles = $.map(files, function (f, i) {
//只留下type為image/*者,例如: image/gif, image/jpeg, image/png...
return f.type.indexOf("image") == 0 ? f : null;
});
//清除ViewModel
vm.images.removeAll(); vm.currImage(null);
//逐一讀入各圖檔,取得DataURI,顯示在網頁上
$.each(imageFiles, function (i, file) {
//使用File API讀取圖檔內容轉為DataUri
var reader = new FileReader();
reader.onload = function (e) {
//將檔名、檔案大小、DataURI放入ViewModel
vm.images.push({
name: file.name,
size: kendo.format("{0:n0} bytes", file.size),
dataUri: e.target.result
})
}
reader.readAsDataURL(file);
});
});
$drop2.bind("dragover", function (e) {
//滑鼠經過上方時加入特效
stopEvent(e);
$(e.target).addClass("hover");
}).bind("dragleave", function (e) {
//滑鼠移開時移除特效
stopEvent(e);
$(e.target).removeClass("hover");
}).bind("drop", function (e) {
//拖放操作完成事件
stopEvent(e);
$(e.target).removeClass("hover");
//由dataTransfer.files取得檔案資訊
var files = e.originalEvent.dataTransfer.files;
var imageFiles = $.map(files, function (f, i) {
//只留下type為image/*者,例如: image/gif, image/jpeg, image/png...
return f.type.indexOf("image") == 0 ? f : null;
});
//清除ViewModel
vm2.images.removeAll(); vm2.currImage2(null);
//逐一讀入各圖檔,取得DataURI,顯示在網頁上
$.each(imageFiles, function (i, file) {
//使用File API讀取圖檔內容轉為DataUri
var reader = new FileReader();
reader.onload = function (e) {
//將檔名、檔案大小、DataURI放入ViewModel
vm2.images.push({
name: file.name,
size: kendo.format("{0:n0} bytes", file.size),
dataUri: e.target.result
})
}
console.log()
reader.readAsDataURL(file);
});
});
function myViewModel() {
var self = this;
self.images = ko.observableArray();
self.currImage = ko.observable();
self.currImage2 = ko.observable();
}
var vm = new myViewModel();
ko.applyBindings(vm);
});
</script>
</body>
<script>
let left = document.getElementById('left');
let right = document.getElementById("right");
left.onscroll = (e) => {
right.scrollTop = e.target.scrollTop;
right.scrollLeft = e.target.scrollLeft;
}
left.on({
"dragover": function (event) {
event.preventDefault();
},
"drop": function (event) {
let file = event.originalEvent.dataTransfer.files[0];
event.preventDefault();
event.stopPropagation();
console.log(file)
}
})
</script>
<style scoped>
#app {
display: flex;
}
.scroll-left,
.scroll-right {
width: 60%;
height: 100vh;
}
.tleft {
margin-right: 10px;
}
.scroll-left {
background-color: antiquewhite;
overflow: auto;
resize: horizontal;
}
.scroll-right {
background-color: #c3faff;
overflow: auto;
}
.item {
height: 200px;
width: 90%;
margin-bottom: 50px;
}
.scroll-left .item {
background-color: brown;
}
.scroll-right .item {
background-color: coral;
}
.drop-zone {
/* position: absolute; */
top: 6px;
width: 180px;
height: 180px;
font-size: 30px;
/* background-color: green; */
color: rgb(0, 0, 0);
text-align: center;
background-color: rgba(100, 255, 216, 0.3);
}
.drop-zone2 {
/* position: absolute; */
top: 6px;
font-size: 30px;
width: 180px;
height: 180px;
color: rgb(0, 0, 0);
text-align: center;
background-color: rgba(100, 255, 216, 0.3);
}
.drop-zone.hover {
background-color: blue;
}
.drop-zone2.hover {
background-color: blue;
}
.img-list {
position: absolute;
height: 180px;
background-color: rgba(68, 68, 68, 0.5);
/* background-color: #444; */
top: 6px;
left: 200px;
right: 6px;
overflow-y: hidden;
overflow-x: auto;
white-space: nowrap;
width: 20%;
}
.img-list2 {
position: absolute;
height: 180px;
background-color: rgba(68, 68, 68, 0.5);
top: 6px;
margin-left: auto;
right: 6px;
overflow-y: hidden;
overflow-x: auto;
white-space: nowrap;
width: 20%;
}
.thumbnail {
max-width: 100px;
max-width: 75px;
vertical-align: top;
margin: 3px;
cursor: pointer;
border: 1px solid transparent;
}
.thumbnail:hover {
border: 1px solid red;
}
.display {
top: 110px;
width: 60%;
height: 100vh;
border-width: 0px;
}
.display2 {
top: 110px;
width: 60%;
height: 100vh;
border-width: 0px;
}
.center {
margin: auto;
width: 20%;
padding: 10px;
}
</style>
</html>
```