VvvebJs是一個開源的網頁拖拽自動生成的JavaScript庫,你可以以簡單拖拽的方式生成自己需要的網頁樣式,內置jquery和Bootstrap,你可以拖拽相關的組件進行網頁的構建,非常的方便,而且可以實時修改代碼,功能豐富,使用簡單,界面友好,特別適合一些專注于展示的網頁設計,需要的朋友不可錯過!
https://github.com/givanz/VvvebJs
默認情況下,編輯器附帶Bootstrap 4和Widgets組件,可以使用任何類型的組件和輸入進行擴展。
如下代碼:
<!-- jquery--> <script src="js/jquery.min.js"></script> <script src="js/jquery.hotkeys.js"></script> <!-- bootstrap--> <script src="js/popper.min.js"></script> <script src="js/bootstrap.min.js"></script> <!-- builder code--> <script src="libs/builder/builder.js"></script> <!-- undo manager--> <script src="libs/builder/undo.js"></script> <!-- inputs--> <script src="libs/builder/inputs.js"></script> <!-- components--> <script src="libs/builder/components-bootstrap4.js"></script> <script src="libs/builder/components-widgets.js"></script> <script> $(document).ready(function() { Vvveb.Builder.init('demo/index.html', function() { //load code after page is loaded here Vvveb.Gui.init(); }); }); </script>
要初始化編輯器,調用Vvveb.Builder.init。第一個參數是要加載以進行編輯的URL,它必須位于相同的子域中才能進行編輯。第二個參數是頁面加載完成時調用的函數,默認情況下調用編輯器Gui.init();
Component Group是一個組件集合,例如Bootstrap 4組由Button和Grid等組件組成,該對象僅用于在編輯器左側面板中對組件進行分組。例如,Widgets組件組只有兩個組件視頻和地圖,并被定義為如下
Vvveb.ComponentsGroup['Widgets'] = ["widgets/googlemaps", "widgets/video"];
Component是一個對象,它提供可以在畫布上放置的html以及在選擇組件時可以編輯的屬性,例如Video Component,具有Url和Target屬性的html鏈接Component定義為:
Vvveb.Components.extend("_base", "html/link", { nodes: ["a"], name: "Link", properties: [{ name: "Url", key: "href", htmlAttr: "href", inputtype: LinkInput }, { name: "Target", key: "target", htmlAttr: "target", inputtype: TextInput }] });
在Component屬性集合中使用Input對象來編輯屬性,例如文本輸入,選擇,顏色,網格行等。例如,TextInput擴展Input對象并定義為:
var TextInput = $.extend({}, Input, { events: { "keyup": ['onChange', 'input'], }, setValue: function(value) { $('input', this.element).val(value); }, init: function(data) { return this.render("textinput", data); }, } );
輸入還需要一個在編輯器html(在editor.html中)定義為<script>標簽的模板,其id為vvveb-input-inputname,例如對于文本輸入為vvveb-input-textinput,定義:
<script id="vvveb-input-textinput" type="text/html"> <div> <input name="{%=key%}" type="text" class="form-control"/> </div> </script>
以上是借助瀏覽器翻譯工具,對官網的文檔進行簡單的翻譯,可能會有些不夠準確的地方,感興趣的小伙伴可以直接查看相關文檔!
VvvebJs是一個非常強大的網頁可視化生成構建工具,讓不懂網頁設計的小伙伴們也能夠通過拖拽來生成美觀大方的網頁出來,讓設計網頁就像設計圖片一樣,VvvebJs特別適合展示型網頁,甚至可以不需要代碼就能完成一項復雜的網頁設計,總體來說,VvvebJs是一個值得嘗試的工具!
anvas是HTML5中的一個重要特性,它是一個可以使用JavaScript繪制圖形的HTML元素。本文將分為以下幾個部分:
接下來,我們將逐一詳細講解。
在開始之前,我們需要準備一些基本的工作。首先,我們需要在HTML文件中添加一個Canvas元素:
<canvas id="canvas"></canvas>
然后,在JavaScript文件中獲取Canvas元素和Canvas上下文:
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
現在,我們將開始繪制圓形。我們將使用Canvas的繪圖API來繪制圓形。首先,我們需要定義圓形的顏色和大?。?/p>
const footprintColor = '#000000';
const footprintSize = 10;
然后,我們需要編寫一個函數來繪制圓形:
function drawFootprint(x, y) {
ctx.beginPath();
ctx.fillStyle = footprintColor;
ctx.arc(x, y, footprintSize, 0, Math.PI * 2);
ctx.fill();
}
在這個函數中,我們使用Canvas的 beginPath() 方法來開始一條新的路徑。然后,我們使用 fillStyle 屬性來設置圓形的顏色。接下來,我們使用 arc() 方法來繪制圓形。最后,我們使用 fill() 方法來填充路徑。
現在,我們已經可以在Canvas上繪制圓形了。我們可以在Canvas上,添加一個鼠標移動事件監聽器,當鼠標移動時,我們將在Canvas上繪制一個圓形。
canvas.addEventListener('mousemove', (event) => {
const x = event.clientX;
const y = event.clientY;
drawFootprint(x, y);
});
在這個事件監聽器中,我們使用 clientX 和 clientY 屬性來獲取鼠標的坐標。然后,我們調用 drawFootprint() 函數來繪制圓形。
現在,我們已經可以在Canvas上繪制圓形了。但是,我們希望圓形能夠跟隨鼠標移動。我們可以使用Canvas的 clearRect() 方法來清除之前繪制的圓形,然后再繪制新的圓形。
canvas.addEventListener('mousemove', (event) => {
const x = event.clientX;
const y = event.clientY;
ctx.clearRect(0, 0, canvas.width, canvas.height);
drawFootprint(x, y);
});
在這個事件監聽器中,我們使用 clearRect() 方法來清除Canvas上之前繪制的圓形。然后,我們調用 drawFootprint() 函數來繪制新的圓形。
現在,我們已經可以在Canvas上,繪制跟隨鼠標移動的圓形了。但是,我們希望圓形能夠隨著時間的推移逐漸消失。我們可以使用 setInterval() 函數來定時清除Canvas上的圓形。
let footprints = [];
function drawFootprint(x, y) {
const footprint = {
x,
y,
alpha: 1
};
footprints.push(footprint);
}
function drawFootprints() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
footprints.forEach((footprint) => {
ctx.beginPath();
ctx.fillStyle = footprintColor;
ctx.arc(footprint.x, footprint.y, footprintSize, 0, Math.PI * 2);
ctx.globalAlpha = footprint.alpha;
ctx.fill();
footprint.alpha -= 0.01;
});
footprints = footprints.filter((footprint) => footprint.alpha > 0);
}
canvas.addEventListener('mousemove', (event) => {
const x = event.clientX;
const y = event.clientY;
drawFootprint(x, y);
});
setInterval(() => {
drawFootprints();
}, 10);
在這個代碼中,我們將每個圓形存儲在一個數組中。每次繪制圓形時,我們將新的圓形添加到數組中。然后,我們使用 setInterval() 函數定時繪制所有圓形,并將透明度逐漸減小。最后,我們過濾掉透明度為0的圓形。
這樣,我們就實現了一個拖影的例子。
希望本文能夠對您有所幫助,感謝您的閱讀!
人人為我,我為人人,謝謝您的瀏覽,我們一起加油吧。
家好! 歡迎來到本教程,我們將深入了解使用 HTML 畫布和 JavaScript 在代碼中創建有趣的氣泡的世界。 最好的部分? 我們將只使用一點 HTML 和所有 JavaScript,而不是 CSS 來實現所有這一切。
今天,我們要掌握以下幾個概念:
使用畫布上下文的 arc 方法創建圓。
利用 requestAnimationFrame 函數實現平滑的圓形動畫。
利用 JavaScript 類的強大功能來創建多個圓圈,而無需重復代碼。
向我們的圓圈添加描邊樣式和填充樣式以獲得 3D 氣泡效果。
你可以跟著我一起看,或者如果你想看源代碼,可以使用最終的codepen
首先,我們需要一個 HTML5 Canvas 元素。 Canvas 是創建形狀、圖像和圖形的強大元素。 這就是氣泡將產生的地方。 讓我們來設置一下 -
<canvas id="canvas"></canvas>
為了使用畫布做任何有意義的事情,我們需要訪問它的上下文。 Context 提供了在畫布上渲染對象和繪制形狀的接口。
讓我們訪問畫布及其上下文。
const canvas = document.getElementById('canvas');
const context = canvas.getContext('2d');
我們將設置畫布以使用整個窗口的高度和寬度 -
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
讓我們通過添加一些 css 為畫布提供一個漂亮的舒緩淺藍色背景。 這是我們要使用的唯一 CSS。 如果您愿意,也可以使用 JavaScript 來完成此操作。
#canvas {
background: #00b4ff;
}
讓我們進入有趣的部分。 我們將通過單擊畫布來創建氣泡。 為了實現這一點,我們首先創建一個點擊事件處理程序:
canvas.addEventListener('click', handleDrawCircle);
由于我們需要知道在畫布上單擊的位置,因此我們將在句柄 DrawCircle 函數中跟蹤它并使用事件的坐標 -
//We are adding x and y here because we will need it later.
let x, y
const handleDrawCircle = (event) => {
x = event.pageX;
y = event.pageY;
// Draw a bubble!
drawCircle(x, y);
};
為了創建圓圈,我們將利用畫布上下文中可用的 arc 方法。 Arc 方法接受 x 和 y - 圓心、半徑、起始角和結束角,對于我們來說,這將是 0 和 2* Math.PI,因為我們正在創建一個完整的圓。
const drawCircle = (x, y) => {
context.beginPath();
context.arc(x, y, 50, 0, 2 * Math.PI);
context.strokeStyle = 'white';
context.stroke();
};
現在我們有了圓圈,讓我們讓它們移動,因為……
GIF
請記住,當我們創建圓時,我們使用了 arc 方法,它接受 x 和 y 坐標 - 圓的中心。 如果我們快速移動圓的 x 和 y 坐標,就會給人一種圓在移動的印象。 讓我們試試吧!
//Define a speed by which to increment to the x and y coordinates
const dx = Math.random() * 3;
const dy = Math.random() * 7;//Increment the center of the circle with this speed
x = x + dx;
y = y - dy;
我們可以將其移至函數內 -
let x, y;
const move = () => {
const dx = Math.random() * 3;
const dy = Math.random() * 7; x = x + dx;
y = y - dy;
};
為了讓我們的圓圈無縫移動,我們將創建一個動畫函數并使用瀏覽器的 requestAnimationFrame 方法來創建一個移動的圓圈。
const animate = () => {
context.clearRect(0, 0, canvas.width, canvas.height);
move();
drawCircle(x,y); requestAnimationFrame(animate);
};//Don't forget to call animate at the bottom
animate();
現在我們已經創建了一個圓圈,是時候創建多個圓圈了!
但在我們創建多個圓圈之前,讓我們準備一下我們的代碼。為了避免重復我們的代碼,我們將使用類并引入 Particle 類。 粒子是我們動態藝術作品和動畫的構建塊。 每個氣泡都是一個粒子,具有自己的位置、大小、運動和顏色屬性。 讓我們定義一個 Particle 類來封裝這些屬性:
class Particle {
constructor(x = 0, y = 0) {}
draw() {
// Drawing the particle as a colored circle
// ...
} move() {
// Implementing particle movement
// ...
}
}
讓我們將一些已設置的常量移至 Particle 類 -
class Particle {
constructor(x = 0, y = 0) {
this.x = x;
this.y = y;
this.radius = Math.random() * 50;
this.dx = Math.random() * 3;
this.dy = Math.random() * 7;
}
draw() {
// Drawing the particle as a colored circle
// ...
} move() {
// Implementing particle movement
// ...
}
}
draw 方法將負責在畫布上渲染粒子。 我們已經在drawCircle中實現了這個功能,所以讓我們將它移動到我們的類中并將變量更新為類變量
class Particle {
constructor(x = 0, y = 0) {
this.x = x;
this.y = y;
this.radius = Math.random() * 50;
this.dx = Math.random() * 3;
this.dy = Math.random() * 7;
this.color = 'white';
}
draw() {
context.beginPath();
context.arc(this.x, this.y, this.radius, 0, 2 * Math.PI);
context.strokeStyle = this.color;
context.stroke(); context.fillStyle = this.color;
context.fill();
} move() {}
}
同樣,讓我們在類中移動 move 函數 -
move() {
this.x = this.x + this.dx;
this.y = this.y - this.dy;
}
現在,我們需要確保在事件處理程序中調用 Particle 類。
const handleDrawCircle = (event) => {
const x = event.pageX;
const y = event.pageY;
const particle = new Particle(x, y);
};canvas.addEventListener('click', handleDrawCircle);
由于我們需要在 animate 函數中訪問該粒子,以便調用其 move 方法,因此我們將該粒子存儲在一個名為 molecularArray 的數組中。 當創建大量粒子時,這個數組也會很有幫助。 這是反映這一點的更新代碼 -
const particleArray = [];
const handleDrawCircle = (event) => {
const x = event.pageX;
const y = event.pageY; const particle = new Particle(x, y);
particleArray.push(particle);
};canvas.addEventListener('click', handleDrawCircle);
記得也要更新動畫功能 -
此時,您將在屏幕上看到這個粒子 -
驚人的! 現在,到了有趣的部分! 讓我們創建很多圓圈并設計它們的樣式,使它們看起來像氣泡。
為了創建大量氣泡,我們將使用 for 循環創建粒子并將它們添加到我們在此處創建的粒子數組中。
const handleDrawCircle = (event) => {
const x = event.pageX;
const y = event.pageY;
for (let i = 0; i < 50; i++) {
const particle = new Particle(x, y);
particleArray.push(particle);
}
};canvas.addEventListener('click', handleDrawCircle);
在動畫函數中,我們將通過清除畫布并在新位置重新繪制粒子來不斷更新畫布。 這會給人一種圓圈在移動的錯覺。
const animate = () => {
context.clearRect(0, 0, canvas.width, canvas.height);
particleArray.forEach((particle) => {
particle?.move();
particle?.draw();
}); requestAnimationFrame(animate);
};animate();
現在我們有了移動的氣泡,是時候給它們添加顏色,使它們看起來像氣泡了!
我們將通過向氣泡添加漸變填充來實現此目的。 這可以使用 context.createRadialGradient 方法來完成。
const gradient = context.createRadialGradient(
this.x,
this.y,
1,
this.x + 0.5,
this.y + 0.5,
this.radius
);
gradient.addColorStop(0.3, 'rgba(255, 255, 255, 0.3)');
gradient.addColorStop(0.95, '#e7feff');context.fillStyle = gradient;
恭喜! 您剛剛僅使用 HTML Canvas 和 JavaScript 創建了一些超級有趣的東西。 您已經學習了如何使用 arc 方法、利用 requestAnimationFrame、利用 JavaScript 類的強大功能以及使用漸變設計氣泡以實現 3D 氣泡效果。
請隨意嘗試顏色、速度和大小,使您的動畫真正獨一無二。
請隨意嘗試顏色、速度和大小,使您的動畫真正獨一無二。
我希望您在學習本教程時能像我在創建它時一樣獲得樂趣。 現在,輪到你進行實驗了。 我很想看看你是否嘗試過這個以及你創造了什么。 與我分享您的代碼鏈接,我很樂意查看。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。