日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

html组态图动态拖拽,基于HTML5的Drag and Drop生成图片Base64信息

發布時間:2025/3/20 HTML 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 html组态图动态拖拽,基于HTML5的Drag and Drop生成图片Base64信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HTML5的Drag and Drop是很不錯的功能,網上使用例子較多如?http://html5demos.com/drag?,但這些例子大部分沒實際用途,本文將搞個有點使用價值的例子,通過Drag and Drop生成圖片的Base64的字符串信息。

使用Base64方式的圖片有諸多好處,可將多個圖片信息整合到單個js文件避免多次http請求,可以避免WebGL例子跨域訪問的安全限制無法本地文件運行等好處,當然弊端也不少例如不能有效利用瀏覽器圖片緩存機制等。使用HT for Web的朋友會發現HT的例子很多注冊圖片都采用Base64的方式,這主要是為了方便用戶直接本地文件打開HT的手冊即可操作瀏覽,無需構建web服務器發布進行訪問,用戶常問然后將圖片轉出Base64信息,我們使用的就是本文介紹的小工具。

該工具由一個列表、一個拓撲圖和一個文本框三部分組成,用戶任意拖拽本地多圖片文件到任意頁面部分,HT自動將圖片信息生成對應的DataModel數據模型,列表顯示圖片效果、名稱和寬高信息,拓撲顯示圖片、修改時間和文件大小等信息,文本框生成對應注冊到htDefault.setImage函數的代碼片段,用戶直接可以將文本框內的代碼拷貝到自己的工程的js文件進行使用。

function init(){

dataModel = new ht.DataModel();

listView = new ht.widget.ListView(dataModel);

graphView = new ht.graph.GraphView(dataModel);

splitView = new ht.widget.SplitView(listView, graphView);

textArea = new ht.widget.TextArea();

textArea.getElement().style.wordWrap = 'normal';

textArea.getElement().style.color = '#777';

textArea.setEditable(false);

new ht.widget.SplitView(splitView, textArea, 'v').addToDOM();

new ht.layout.ForceLayout(graphView).start();

listView.setRowHeight(50);

listView.drawRowBackground = function(g, data, selected, x, y, width, height){

if(this.isSelected(data)){

g.fillStyle = '#87A6CB';

}

else if(this.getRowIndex(data) % 2 === 0){

g.fillStyle = '#F1F4F7';

}

else{

g.fillStyle = '#FAFAFA';

}

g.beginPath();

g.rect(x, y, width, height);

g.fill();

};

ht.Default.setImage('icon', {

width: 50,

height: 50,

clip: function(g, width, height) {

g.beginPath();

g.arc(width/2, height/2, Math.min(width, height)/2-3, 0, Math.PI * 2, true);

g.clip();

},

comps: [

{

type: 'image',

stretch: 'uniform',

rect: [0, 0, 50, 50],

name: {func: 'getImage'}

}

]

});

listView.setIndent(60);

listView.setVisibleFunc(function(data){

return data instanceof ht.Node;

});

listView.getIcon = function(data){

return 'icon';

};

listView.getLabel = function(data){

var name = data.getName(name);

var image = ht.Default.getImage(name);

if(image){

name += ' ( ' + image.width + ' X ' + image.height + ' )';

}

return name;

};

window.addEventListener("dragenter", dragEnter, false);

window.addEventListener("dragexit", dragExit, false);

window.addEventListener("dragover", dragOver, false);

window.addEventListener("drop", drop, false);

}

function dragEnter(evt) {

evt.stopPropagation();

evt.preventDefault();

}

function dragExit(evt) {

evt.stopPropagation();

evt.preventDefault();

}

function dragOver(evt) {

evt.stopPropagation();

evt.preventDefault();

}

function drop(evt) {

evt.stopPropagation();

evt.preventDefault();

dataModel.clear();

textArea.setText("");

lastNode = null;

var files = evt.dataTransfer.files;

var count = files.length;

for (var i = 0; i < count; i++) {

var file = files[i];

var reader = new FileReader();

reader.onloadend = handleReaderLoadEnd;

reader.file = file;

reader.readAsDataURL(file);

}

}

function handleReaderLoadEnd(evt) {

var reader = evt.target;

var file = reader.file;

var name = file.name;

name = name.substr(0, name.length - 4);

var text = "ht.Default.setImage('" + name + "', '" + reader.result + "');\n";

textArea.setText(textArea.getText() + text);

ht.Default.setImage(name, reader.result);

var note = 'Date: ' + file.lastModifiedDate.toLocaleString() + '\n'

+ 'Name: ' + file.name + '\n'

+ 'Size: ' + file.size + '\n'

+ 'Type: ' + file.type;

var node = new ht.Node();

node.setName(name);

node.setImage(name);

node.s({

'note': note,

'note.position': 3

});

dataModel.add(node);

if(lastNode){

var edge = new ht.Edge(lastNode, node);

dataModel.add(edge);

}

lastNode = node;

}

該代碼主要對window添加了dragenter、dragexit、dragover和drop的拖拽處理,大部分都是通過e.stopPropagation();和evt.preventDefault();阻止默認行為,我們僅需在最后的drop事件中通過e.dataTransfer.files得到所有當前拖拽文件信息,構建FileReader進行加載,然后對加載的信息構建對應DataModel中的ht.Node對象和屬性就完事了。

最后代碼中還有幾處使用HT for Web的技術細節值得提到,左側list列表通過自定義矢量圖標,并且在定義矢量時采用了clip的功能,這樣列表的圖標就會顯示成clip裁剪后的圓形效果。重載了listView.drawRowBackground函數,實現隔行變色的列表效果。重載了listView.getLabel顯示了更多的動態文本信息。通過listView.setVisibleFunc過濾不顯示連線信息在列表中。

總結

以上是生活随笔為你收集整理的html组态图动态拖拽,基于HTML5的Drag and Drop生成图片Base64信息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。