簡體   English   中英

使用 svg.js 清除並重新繪制

[英]Clear and re-draw using svg.js

我想使用 svg.js 繪制一些元素,然后清除 canvas 並繪制新元素。 我正在使用draw.clear()但是當我重新繪制元素時,它們是不可見的。 這種方法是正確的還是我錯過了什么? 我也試過remove()

var width = 500;
var height = 500;

var pos_x = 0;
var pos_y = 0;

var texto = [];
var grupo = [];
var rect = [];
var clip = [];
var random_rotation = [];

var latino = 'ABCDEFGHIJKLMNOPQRSTUVXYZ'.split('');
var cirilico = 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЮЯ'.split('');
var hebreo = 'אבגדהוזיךכל   םמןנסעףפפצקחט   '.split('');
var griego = 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨ'.split('');
var arabe = 'ابتثجحخدذرزسشصضطظعغفقكلمنهويةءأإ'.split('');
var coreano = 'ㅏㅑㅓㅕㅗㅛㅜㅠㅡㅣㅐㅒㅔㅖㅘㅙㅚㅝㅞㅟㅢㄱㄴㄷㄹㅁㅂㅅㅇㅈㅊㅋㅌㅍㅎㄲㄸㅃㅆㅉㄳㄵㄶㄺㄻㄿㄽㄾㄿㅀㅄ'.split('');
var glagolitico = 'ⰀⰁⰂⰃⰄⰅⰆⰇⰈⰉⰊⰋⰌⰍⰎⰏⰐⰑⰒⰓⰔⰕⰖⰗⰘⰙⰚⰛⰜⰝⰞⰟⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬⰭⰮ'.split('');
var hiragana = 'あかさたなはまやらわがざだばぱいきしちにひみり(ゐ)ぎじぢびぴうくすつぬふむゆるぐずづぶぷえけせてねへめれ(ゑ)げぜでべぺおこそとのほもよろをごぞどぼぽ'.split('');
var katakana = 'アカサタナハマヤラワガザダバパヴァイキシチニヒミリ(ヰ)ギジヂビピヴィウクスツヌフムユルグズヅブプヴエケセテネヘメレ(ヱ)ゲゼデベペヴェオコソトノホモヨロヲゴゾドボポヴォ'.split('');

var sistemas = [latino, cirilico, hebreo, griego, arabe, coreano, glagolitico, hiragana, katakana];

var alfabeto = [];
var letra = [];

var draw = SVG().addTo('.container').size(width, height).attr({id: 'svg'}); 

function getRndInteger(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

function getRndFloat(min, max) {
  return (Math.random() * (max - min)) + min;
}

// Create symbols
function grafema(){
    for (var i = 0; i <= 3; i++){

        alfabeto[i] = getRndInteger(0, sistemas.length - 1);

        letra[i] = sistemas[alfabeto[i]][getRndInteger(0, sistemas[alfabeto[i]].length - 1)];

        random_rotation[i] = getRndInteger(0, 360);

        texto[i] = draw.text(letra[i])
                    .font({
                        family: 'Arial Unicode MS',
                        size: 500,
                        anchor: 'middle'
                    })
                    .transform({
                        translateX: width/2,
                        translateY: (height/2) * -1,
                        rotate: random_rotation[i],
                        scale: getRndFloat(0.5, 0.6)
                    });

        grupo[i] = draw.group()
                    .attr({
                        id: 'letra ' + i
                    });

        grupo[i].add(texto[i]);

        rect[i] = draw.rect(200, 200)
                    .attr({
                        x: pos_x,
                        y: pos_y,
                    })
                    .transform({
                        rotate : random_rotation[i],
                    });

        pos_x = pos_x + 200;

        if (pos_x > 200) {
            pos_x = 0;
            pos_y = pos_y + 200;
        }

        clip[i] = draw.clip().add(rect[i]);
        grupo[i].clipWith(clip[i]);
    }
}

grafema();
draw.clear();
grafema();

這是我正在嘗試創建的程序的簡化版本。 將來我想在用戶點擊時清除並重新繪制。

您的代碼中的問題不是clear()方法。 您正在使用全局變量pos_xpos_y並且正在遞增它們。 在您的第二幅圖中,圖像位於可見區域之外。 要解決您的問題,請在您的grafema function 開頭初始化這些變量:

// ...
function grafema() {
    pos_x = 0;
    pos_y = 0;
    for (var i = 0; i <= 3; i++) {
        // ...

無限繪圖的執行示例:

https://jsbin.com/mehuholiwo/edit?js,output

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM