最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

HTML很火的浪漫愛心表白代碼

 更新時間:2023年01月01日 10:07:32   作者:吾不圖  
程序員的你是不是也想送個特別的禮物。今天給大家分享一個HTML+CSS+jQuery實現(xiàn)的情侶浪漫愛心表白JS特效,視覺效果還是相當不錯!得此表白神器,程序猿也可以很浪漫!快去追你的女神吧,把這個告白愛心動畫發(fā)給你心愛的她!

 程序員的你是不是也想送個特別的禮物。今天給大家分享一個HTML+CSS+jQuery實現(xiàn)的情侶浪漫愛心表白JS特效,視覺效果還是相當不錯!得此表白神器,程序猿也可以很浪漫!快去追你的女神吧,把這個告白愛心動畫發(fā)給你心愛的她!

HTML代碼如下,親測可用。

<!DOCTYPE html>
<html lang="zh">
	<head>
		<meta charset="UTF-8">
		<meta http-equiv="X-UA-Compatible" content="IE=edge">
		<title>DIY跳動愛心</title>
		<style>
			* {
				padding: 0;
				margin: 0;
			}

			body {
				height: 600px;
				padding: 0;
				margin: 0;
				background: #000;
				display: flex;
				justify-content: center;
				align-items: center;
			}

			.container {
				width: 500px;
				height: 500px;
				position: relative;
			}

			canvas {
				z-index: 99;
				position: absolute;
				width: 500px;
				height: 500px;
			}

			.text_box {
				text-align: center;
				position: absolute;
				font-size: 1.125rem;
				top: 36%;
				left: 22%;
				color: #ff437b;
				z-index: 100;
			}

			input {
				font-size: 1.375rem;
				color: #ff437b;
				text-align: center;
				background: none;
			}

			button {
				font-size: 1.375rem;
				border: none;
				border-radius: 4px;
			}

			input::input-placeholder {
				color: #dc4b61;
			}

			input::-webkit-input-placeholder {
				color: #dc4b61;
			}


			.heart {
				animation: heart 1s infinite ease-in-out;
			}

			@keyframes heart {

				0%,
				100% {
					transform: rotate(-2deg) scale(1);
				}

				50% {
					transform: rotate(2deg) scale(1.12);
				}
			}
		</style>
	</head>
	<body>
		<div id="jsi-cherry-container" class="container ">
			<!-- 愛心 -->
			<canvas id="pinkboard" class="container heart"> </canvas>
			<!-- 輸入你需要的文字 -->
			<div class="text_box">
				<input type="text" id="text" placeholder="送給你的那個[Ta]?">
				<button id="btn" onclick="fn()">??</button>
			</div>

		</div>
	</body>
	<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
	<script>
		function fn() {
			var a1 = document.querySelector('#text');
			var btn = document.querySelector('#btn');
			a1.style.border = 'none';
			btn.parentNode.removeChild(btn);
			console.log("點關(guān)注不迷路!");
		}
	</script>
	<script>
		/*
		 * Settings
		 */
		var settings = {
			particles: {
				length: 500, // maximum amount of particles
				duration: 2, // particle duration in sec
				velocity: 100, // particle velocity in pixels/sec
				effect: -0.75, // play with this for a nice effect
				size: 30, // particle size in pixels
			},
		};

		(function() {
			var b = 0;
			var c = ["ms", "moz", "webkit", "o"];
			for (var a = 0; a < c.length && !window.requestAnimationFrame; ++a) {
				window.requestAnimationFrame = window[c[a] + "RequestAnimationFrame"];
				window.cancelAnimationFrame =
					window[c[a] + "CancelAnimationFrame"] ||
					window[c[a] + "CancelRequestAnimationFrame"];
			}
			if (!window.requestAnimationFrame) {
				window.requestAnimationFrame = function(h, e) {
					var d = new Date().getTime();
					var f = Math.max(0, 16 - (d - b));
					var g = window.setTimeout(function() {
						h(d + f);
					}, f);
					b = d + f;
					return g;
				};
			}
			if (!window.cancelAnimationFrame) {
				window.cancelAnimationFrame = function(d) {
					clearTimeout(d);
				};
			}
		})();

		/*
		 * Point class
		 */
		var Point = (function() {
			function Point(x, y) {
				this.x = typeof x !== "undefined" ? x : 0;
				this.y = typeof y !== "undefined" ? y : 0;
			}
			Point.prototype.clone = function() {
				return new Point(this.x, this.y);
			};
			Point.prototype.length = function(length) {
				if (typeof length == "undefined")
					return Math.sqrt(this.x * this.x + this.y * this.y);
				this.normalize();
				this.x *= length;
				this.y *= length;
				return this;
			};
			Point.prototype.normalize = function() {
				var length = this.length();
				this.x /= length;
				this.y /= length;
				return this;
			};
			return Point;
		})();

		/*
		 * Particle class
		 */
		var Particle = (function() {
			function Particle() {
				this.position = new Point();
				this.velocity = new Point();
				this.acceleration = new Point();
				this.age = 0;
			}
			Particle.prototype.initialize = function(x, y, dx, dy) {
				this.position.x = x;
				this.position.y = y;
				this.velocity.x = dx;
				this.velocity.y = dy;
				this.acceleration.x = dx * settings.particles.effect;
				this.acceleration.y = dy * settings.particles.effect;
				this.age = 0;
			};
			Particle.prototype.update = function(deltaTime) {
				this.position.x += this.velocity.x * deltaTime;
				this.position.y += this.velocity.y * deltaTime;
				this.velocity.x += this.acceleration.x * deltaTime;
				this.velocity.y += this.acceleration.y * deltaTime;
				this.age += deltaTime;
			};
			Particle.prototype.draw = function(context, image) {
				function ease(t) {
					return --t * t * t + 1;
				}
				var size = image.width * ease(this.age / settings.particles.duration);
				context.globalAlpha = 1 - this.age / settings.particles.duration;
				context.drawImage(
					image,
					this.position.x - size / 2,
					this.position.y - size / 2,
					size,
					size
				);
			};
			return Particle;
		})();

		/*
		 * ParticlePool class
		 */
		var ParticlePool = (function() {
			var particles,
				firstActive = 0,
				firstFree = 0,
				duration = settings.particles.duration;

			function ParticlePool(length) {
				// create and populate particle pool
				particles = new Array(length);
				for (var i = 0; i < particles.length; i++)
					particles[i] = new Particle();
			}
			ParticlePool.prototype.add = function(x, y, dx, dy) {
				particles[firstFree].initialize(x, y, dx, dy);

				// handle circular queue
				firstFree++;
				if (firstFree == particles.length) firstFree = 0;
				if (firstActive == firstFree) firstActive++;
				if (firstActive == particles.length) firstActive = 0;
			};
			ParticlePool.prototype.update = function(deltaTime) {
				var i;

				// update active particles
				if (firstActive < firstFree) {
					for (i = firstActive; i < firstFree; i++)
						particles[i].update(deltaTime);
				}
				if (firstFree < firstActive) {
					for (i = firstActive; i < particles.length; i++)
						particles[i].update(deltaTime);
					for (i = 0; i < firstFree; i++) particles[i].update(deltaTime);
				}

				// remove inactive particles
				while (
					particles[firstActive].age >= duration &&
					firstActive != firstFree
				) {
					firstActive++;
					if (firstActive == particles.length) firstActive = 0;
				}
			};
			ParticlePool.prototype.draw = function(context, image) {
				// draw active particles
				if (firstActive < firstFree) {
					for (i = firstActive; i < firstFree; i++)
						particles[i].draw(context, image);
				}
				if (firstFree < firstActive) {
					for (i = firstActive; i < particles.length; i++)
						particles[i].draw(context, image);
					for (i = 0; i < firstFree; i++) particles[i].draw(context, image);
				}
			};
			return ParticlePool;
		})();

		/*
		 * Putting it all together
		 */
		(function(canvas) {
			var context = canvas.getContext("2d"),
				particles = new ParticlePool(settings.particles.length),
				particleRate =
				settings.particles.length / settings.particles.duration, // particles/sec
				time;

			// get point on heart with -PI <= t <= PI
			function pointOnHeart(t) {
				return new Point(
					160 * Math.pow(Math.sin(t), 3),
					130 * Math.cos(t) -
					50 * Math.cos(2 * t) -
					20 * Math.cos(3 * t) -
					10 * Math.cos(4 * t) +
					25
				);
			}

			// creating the particle image using a dummy canvas
			var image = (function() {
				var canvas = document.createElement("canvas"),
					context = canvas.getContext("2d");
				canvas.width = settings.particles.size;
				canvas.height = settings.particles.size;
				// helper function to create the path
				function to(t) {
					var point = pointOnHeart(t);
					point.x =
						settings.particles.size / 2 +
						(point.x * settings.particles.size) / 350;
					point.y =
						settings.particles.size / 2 -
						(point.y * settings.particles.size) / 350;
					return point;
				}
				// create the path
				context.beginPath();
				var t = -Math.PI;
				var point = to(t);
				context.moveTo(point.x, point.y);
				while (t < Math.PI) {
					t += 0.01; // baby steps!
					point = to(t);
					context.lineTo(point.x, point.y);
				}
				context.closePath();
				// create the fill
				context.fillStyle = "#dc4b61";
				context.fill();
				// create the image
				var image = new Image();
				image.src = canvas.toDataURL();
				return image;
			})();

			// render that thing!
			function render() {
				// next animation frame
				requestAnimationFrame(render);

				// update time
				var newTime = new Date().getTime() / 1000,
					deltaTime = newTime - (time || newTime);
				time = newTime;

				// clear canvas
				context.clearRect(0, 0, canvas.width, canvas.height);

				// create new particles
				var amount = particleRate * deltaTime;
				for (var i = 0; i < amount; i++) {
					var pos = pointOnHeart(Math.PI - 2 * Math.PI * Math.random());
					var dir = pos.clone().length(settings.particles.velocity);
					particles.add(
						canvas.width / 2 + pos.x,
						canvas.height / 2 - pos.y,
						dir.x,
						-dir.y
					);
				}

				// update and draw particles
				particles.update(deltaTime);
				particles.draw(context, image);
			}

			// handle (re-)sizing of the canvas
			function onResize() {
				canvas.width = canvas.clientWidth;
				canvas.height = canvas.clientHeight;
			}
			window.onresize = onResize;

			// delay rendering bootstrap
			setTimeout(function() {
				onResize();
				render();
			}, 10);
		})(document.getElementById("pinkboard"));
	</script>
</html>

相關(guān)文章

  • html+JavaScript煙花3D簡單特效(親測可用)

    html+JavaScript煙花3D簡單特效(親測可用)

    網(wǎng)頁煙花特效方便使用,更能給養(yǎng)眼享受,復制黏貼就能使用,快來試試吧。這篇文章主要介紹了html+JavaScript煙花3D特效(親測可用),需要的朋友可以參考下
    2023-01-01
  • 百度手寫板代碼JavaScript遠程調(diào)用的實現(xiàn)(鼠標輸入法)

    百度手寫板代碼JavaScript遠程調(diào)用的實現(xiàn)(鼠標輸入法)

    百度手寫板代碼JavaScript遠程調(diào)用的實現(xiàn),其實沒什么可參考的,引用百度的Js文件,如果大家想使用這個類的話,自己下載就行了,正好可參考一下本演示,幫你快速入題。
    2010-09-09
  • Web網(wǎng)頁對話框可拖動、關(guān)閉(自動)文字循環(huán)變化

    Web網(wǎng)頁對話框可拖動、關(guān)閉(自動)文字循環(huán)變化

    由Js實現(xiàn)的網(wǎng)頁WEB對話框,鼠標可隨意拖動改變位置,類似于有些軟件初次運行時候彈出的每日提示,里面有文字在循環(huán)變化,時間到自動關(guān)閉,多么強大的一個web對話框啊,有興趣的朋友可以參考下啊
    2012-12-12
  • Js檢測判斷URL網(wǎng)址輸入是否正確

    Js檢測判斷URL網(wǎng)址輸入是否正確

    JavaScript檢測判斷用戶輸入的URL是否正確,簡單的正則規(guī)則,很準確的判斷URL的合法性,值得借鑒。
    2010-10-10
  • 自己寫的兼容ie和ff的在線文本編輯器類似ewebeditor

    自己寫的兼容ie和ff的在線文本編輯器類似ewebeditor

    最近寫了個在線的編輯器,類似ewebeditor那樣的,當然沒有人家那么強大,但是基本功能都有,而且還是兼容ie和ff的,需要的朋友可以參考下
    2012-12-12
  • table 隔列(行)換色效果讓表格結(jié)構(gòu)更清淅

    table 隔列(行)換色效果讓表格結(jié)構(gòu)更清淅

    table 隔列換色效果,很實用的一款網(wǎng)頁特效代碼,用隔行換色來修飾表格,可讓表格結(jié)構(gòu)更清淅,也更加美觀,是一個十分流行的表格特效,在網(wǎng)頁中有利于提高用戶體驗,是一個很不錯的效果,需要的朋友可以參考下
    2012-12-12
  • 花瓣漫天飛舞js特效,簡單浪漫

    花瓣漫天飛舞js特效,簡單浪漫

    現(xiàn)代社會結(jié)婚、走紅毯等很多時候會撒花瓣,滿天花瓣和賞煙花一樣,人們都覺得那一瞬間好美麗好浪漫。就像曇花一現(xiàn),美好的事物總是很短暫,提醒人們?nèi)フ湎?。這篇文章主要介紹了花瓣漫天飛舞js特效,簡單浪漫,程序猿們可以跟女朋友一起欣賞
    2023-01-01
  • Js獲取電腦屏幕的顏色色彩品質(zhì)(16位或32位)

    Js獲取電腦屏幕的顏色色彩品質(zhì)(16位或32位)

    Js獲取屏幕的顏色色彩品質(zhì),16位或32位,只需運行本代碼,即可得到你當前屏幕的顏色品質(zhì),現(xiàn)在一般都是32位了。
    2010-09-09
  • js實現(xiàn)花俏的轉(zhuǎn)動、旋轉(zhuǎn)之后慢慢張開的窗口特效

    js實現(xiàn)花俏的轉(zhuǎn)動、旋轉(zhuǎn)之后慢慢張開的窗口特效

    花俏的轉(zhuǎn)動的窗口,主要是使用JavaScript代碼實現(xiàn),運行本效果后,窗口不斷旋轉(zhuǎn),而后慢慢張開,很炫的效果,看到之后我都目瞪口呆了,真的是很炫,期待喜歡的朋友借鑒參考
    2012-12-12
  • 一款雙向無縫+按鈕定位的焦點圖實現(xiàn)代碼

    一款雙向無縫+按鈕定位的焦點圖實現(xiàn)代碼

    做這個焦點圖弄了大個晚上,感覺挺暈的~發(fā)上來給大家踩一下吧 雙向無縫的原理很簡單實現(xiàn)起來也不難,主要頭痛的是在前后無縫與按鈕定位之間的配合問題,不過還好現(xiàn)在總算OK了。
    2010-11-11

最新評論

惠州市| 彭山县| 乌兰察布市| 洛浦县| 清水河县| 沂水县| 丰宁| 阿鲁科尔沁旗| 伊川县| 岳阳市| 巩义市| 曲水县| 来宾市| 玉溪市| 镇沅| 新昌县| 高邑县| 美姑县| 清远市| 永修县| 沙雅县| 桑植县| 治县。| 临清市| 左云县| 陆河县| 上蔡县| 丰原市| 赫章县| 通化市| 彩票| 太康县| 库尔勒市| 丹凤县| 永顺县| 元氏县| 临朐县| 砚山县| 唐海县| 平潭县| 祁阳县|