当前位置:   article > 正文

【表白程序】樱花雨3d相册代码

樱花雨3d相册

我挥舞着键盘和本子,发誓要把世界写个明明白白。

在这里插入图片描述

简介

今天带来的是照片墙,希望大家喜欢!

利用所学知识给他/她一个惊喜,是作为计算机专业的你最大的乐趣。

如果你是非计算机专业的,也没关系,跟着如下步骤来你也将成为酷酷的程序员

操作步骤:

新建文件夹,vscode打开(代码目录)

建立index.html文件(写代码)

完整代码如下(重点)

安装插件live server(运行代码)

使用插件运行程序

哦!是我多心了吧!为何在下如此话多。

注意:预先步骤已下载vscode代码编译器,关注微信公众号「ClassmateJie」有vscode安装包以及安装步骤哦!回复 vscode 即可获取


以下为本期内容|关注微信公众号「先取个名字吧

新建文件夹,vscode打开

在这里插入图片描述
在这里插入图片描述

建立index.html文件

在这里插入图片描述

在这里插入图片描述

完整代码获取如下

关注微信公众号「ClassmateJie」 回复 玫瑰 即可获取完整代码

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <title></title>
    <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    <link type="text/css" href="./css/style1.css" rel="stylesheet" />
    <style>
        html,
        body {
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
            overflow: hidden;
        }

        .container {
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
            background-color: #000000;
        }
    </style>
</head>

<body>
    
    <div class="m-main">
		<div class="player">
			<a href="javascript:void(0)" rel="external nofollow" rel="external nofollow" id="js-play">
				<img src="./img-one/开始.png" alt="" id="img1"/>
            </a>
			<a href="javascript:void(0)" rel="external nofollow" rel="external nofollow" id="js-pause">
				<img src="./img-one/暂停.png" alt="" id="img2"/>
			</a>
			<div class="play-box">
				<div class="left">
					<p class="timeline"><span style=""></span></p>
					<div class="info">
						<span class="size">00:00</span>
						<span class="timeshow">00:00</span>
					</div>
				</div>
			</div>
		</div>
		<div class="video">
			<video controls autoplay name="media" id="js-video"><source src="./mp3/白月光与朱砂痣.mp3" type="video/mp4"></video>
		</div>
	</div>
</div>
    <div id="jsi-cherry-container" class="container">
        <div class="box">
            <ul class="minbox">
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
            </ul>
            <ol class="maxbox">
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
            </ol>
        </div>
    </div>
    <script>
        $(function () {
            AudioControl('js-video');

            function AudioControl(id) {
                // 音频控制进度条
                console.log(777);
                var audio = document.getElementById(id);
                $(audio).on('loadedmetadata', function () {
                    audio.pause();
                    // 进度条控制
                    $(document).on('touchend', '.timeline', function (e) {
                        var x = e.originalEvent.changedTouches[0].clientX - this.offsetLeft;
                        var X = x < 0 ? 0 : x;
                        var W = $(this).width();
                        var place = X > W ? W : X;
                        audio.currentTime = (place / W).toFixed(2) * audio.duration;
                        $(this).children().css({
                            width: (place / W).toFixed(2) * 100 + "%"
                        })
                    });
                    // 播放
                    $(document).on('click', '#js-play', function () {
                        audio.play()
                        $('#img1').css("display","none");
                        $('#img2').css("display","block");
                    });
                    // 暂停
                    $(document).on('click', '#js-pause', function () {
                        audio.pause()
                        $('#img1').css("display","block");
                        $('#img2').css("display","none");
                    });
                });
                setInterval(function () {
                    var currentTime = audio.currentTime;
                    setTimeShow(currentTime);
                }, 1000);
                // 设置播放时间
                function setTimeShow(t) {
                    t = Math.floor(t);
                    var playTime = secondToMin(audio.currentTime);
                    $(".size").html(playTime);
                    $('.timeshow').text(secondToMin(audio.duration));
                    $('.timeline').children().css({
                        width: (t / audio.duration).toFixed(4) * 100 + "%"
                    })
                }
                // 计算时间
                function secondToMin(s) {
                    var MM = Math.floor(s / 60);
                    var SS = s % 60;
                    if (MM < 10)
                        MM = "0" + MM;
                    if (SS < 10)
                        SS = "0" + SS;
                    var min = MM + ":" + SS;
                    return min.split('.')[0];
                }
            }
        })
        var RENDERER = {
            INIT_CHERRY_BLOSSOM_COUNT: 30,
            MAX_ADDING_INTERVAL: 10,

            init: function () {
                this.setParameters();
                this.reconstructMethods();
                this.createCherries();
                this.render();
                if (
                    navigator.userAgent.match(
                        /(phone|pod|iPhone|iPod|ios|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
                    )
                ) {
                    var box = document.querySelectorAll('.box')[0];
                    console.log(box, '移动端');
                    box.style.marginTop = '65%';
                }
            },
            setParameters: function () {
                this.$container = $('#jsi-cherry-container');
                this.width = this.$container.width();
                this.height = this.$container.height();
                this.context = $('<canvas />')
                    .attr({
                        width: this.width,
                        height: this.height
                    })
                    .appendTo(this.$container)
                    .get(0)
                    .getContext('2d');
                this.cherries = [];
                this.maxAddingInterval = Math.round(
                    (this.MAX_ADDING_INTERVAL * 1000) / this.width
                );
                this.addingInterval = this.maxAddingInterval;
            },
            reconstructMethods: function () {
                this.render = this.render.bind(this);
            },
            createCherries: function () {
                for (
                    var i = 0,
                        length = Math.round(
                            (this.INIT_CHERRY_BLOSSOM_COUNT * this.width) / 1000
                        ); i < length; i++
                ) {
                    this.cherries.push(new CHERRY_BLOSSOM(this, true));
                }
            },
            render: function () {
                requestAnimationFrame(this.render);
                this.context.clearRect(0, 0, this.width, this.height);

                this.cherries.sort(function (cherry1, cherry2) {
                    return cherry1.z - cherry2.z;
                });
                for (var i = this.cherries.length - 1; i >= 0; i--) {
                    if (!this.cherries[i].render(this.context)) {
                        this.cherries.splice(i, 1);
                    }
                }
                if (--this.addingInterval == 0) {
                    this.addingInterval = this.maxAddingInterval;
                    this.cherries.push(new CHERRY_BLOSSOM(this, false));
                }
            }
        };
        var CHERRY_BLOSSOM = function (renderer, isRandom) {
            this.renderer = renderer;
            this.init(isRandom);
        };
        CHERRY_BLOSSOM.prototype = {
            FOCUS_POSITION: 300,
            FAR_LIMIT: 600,
            MAX_RIPPLE_COUNT: 100,
            RIPPLE_RADIUS: 100,
            SURFACE_RATE: 0.5,
            SINK_OFFSET: 20,

            init: function (isRandom) {
                this.x = this.getRandomValue(
                    -this.renderer.width,
                    this.renderer.width
                );
                this.y = isRandom ?
                    this.getRandomValue(0, this.renderer.height) :
                    this.renderer.height * 1.5;
                this.z = this.getRandomValue(0, this.FAR_LIMIT);
                this.vx = this.getRandomValue(-2, 2);
                this.vy = -2;
                this.theta = this.getRandomValue(0, Math.PI * 2);
                this.phi = this.getRandomValue(0, Math.PI * 2);
                this.psi = 0;
                this.dpsi = this.getRandomValue(Math.PI / 600, Math.PI / 300);
                this.opacity = 0;
                this.endTheta = false;
                this.endPhi = false;
                this.rippleCount = 0;

                var axis = this.getAxis(),
                    theta =
                    this.theta +
                    (Math.ceil(
                            -(this.y + this.renderer.height * this.SURFACE_RATE) / this.vy
                        ) *
                        Math.PI) /
                    500;
                theta %= Math.PI * 2;

                this.offsetY =
                    40 * (theta <= Math.PI / 2 || theta >= (Math.PI * 3) / 2 ? -1 : 1);
                this.thresholdY =
                    this.renderer.height / 2 +
                    this.renderer.height * this.SURFACE_RATE * axis.rate;
                this.entityColor = this.renderer.context.createRadialGradient(
                    0,
                    40,
                    0,
                    0,
                    40,
                    80
                );
                this.entityColor.addColorStop(
                    0,
                    'hsl(330, 70%, ' + 50 * (0.3 + axis.rate) + '%)'
                );
                this.entityColor.addColorStop(
                    0.05,
                    'hsl(330, 40%,' + 55 * (0.3 + axis.rate) + '%)'
                );
                this.entityColor.addColorStop(
                    1,
                    'hsl(330, 20%, ' + 70 * (0.3 + axis.rate) + '%)'
                );
                this.shadowColor = this.renderer.context.createRadialGradient(
                    0,
                    40,
                    0,
                    0,
                    40,
                    80
                );
                this.shadowColor.addColorStop(
                    0,
                    'hsl(330, 40%, ' + 30 * (0.3 + axis.rate) + '%)'
                );
                this.shadowColor.addColorStop(
                    0.05,
                    'hsl(330, 40%,' + 30 * (0.3 + axis.rate) + '%)'
                );
                this.shadowColor.addColorStop(
                    1,
                    'hsl(330, 20%, ' + 40 * (0.3 + axis.rate) + '%)'
                );
            },
            getRandomValue: function (min, max) {
                return min + (max - min) * Math.random();
            },
            getAxis: function () {
                var rate = this.FOCUS_POSITION / (this.z + this.FOCUS_POSITION),
                    x = this.renderer.width / 2 + this.x * rate,
                    y = this.renderer.height / 2 - this.y * rate;
                return {
                    rate: rate,
                    x: x,
                    y: y
                };
            },
            renderCherry: function (context, axis) {
                context.beginPath();
                context.moveTo(0, 40);
                context.bezierCurveTo(-60, 20, -10, -60, 0, -20);
                context.bezierCurveTo(10, -60, 60, 20, 0, 40);
                context.fill();

                for (var i = -4; i < 4; i++) {
                    context.beginPath();
                    context.moveTo(0, 40);
                    context.quadraticCurveTo(i * 12, 10, i * 4, -24 + Math.abs(i) * 2);
                    context.stroke();
                }
            },
            render: function (context) {
                var axis = this.getAxis();

                if (
                    axis.y == this.thresholdY &&
                    this.rippleCount < this.MAX_RIPPLE_COUNT
                ) {
                    context.save();
                    context.lineWidth = 2;
                    context.strokeStyle =
                        'hsla(0, 0%, 100%, ' +
                        (this.MAX_RIPPLE_COUNT - this.rippleCount) /
                        this.MAX_RIPPLE_COUNT +
                        ')';
                    context.translate(
                        axis.x +
                        this.offsetY * axis.rate * (this.theta <= Math.PI ? -1 : 1),
                        axis.y
                    );
                    context.scale(1, 0.3);
                    context.beginPath();
                    context.arc(
                        0,
                        0,
                        (this.rippleCount / this.MAX_RIPPLE_COUNT) *
                        this.RIPPLE_RADIUS *
                        axis.rate,
                        0,
                        Math.PI * 2,
                        false
                    );
                    context.stroke();
                    context.restore();
                    this.rippleCount++;
                }
                if (axis.y < this.thresholdY || !this.endTheta || !this.endPhi) {
                    if (this.y <= 0) {
                        this.opacity = Math.min(this.opacity + 0.01, 1);
                    }
                    context.save();
                    context.globalAlpha = this.opacity;
                    context.fillStyle = this.shadowColor;
                    context.strokeStyle =
                        'hsl(330, 30%,' + 40 * (0.3 + axis.rate) + '%)';
                    context.translate(
                        axis.x,
                        Math.max(axis.y, this.thresholdY + this.thresholdY - axis.y)
                    );
                    context.rotate(Math.PI - this.theta);
                    context.scale(axis.rate * -Math.sin(this.phi), axis.rate);
                    context.translate(0, this.offsetY);
                    this.renderCherry(context, axis);
                    context.restore();
                }
                context.save();
                context.fillStyle = this.entityColor;
                context.strokeStyle = 'hsl(330, 40%,' + 70 * (0.3 + axis.rate) + '%)';
                context.translate(
                    axis.x,
                    axis.y + Math.abs(this.SINK_OFFSET * Math.sin(this.psi) * axis.rate)
                );
                context.rotate(this.theta);
                context.scale(axis.rate * Math.sin(this.phi), axis.rate);
                context.translate(0, this.offsetY);
                this.renderCherry(context, axis);
                context.restore();

                if (this.y <= -this.renderer.height / 4) {
                    if (!this.endTheta) {
                        for (
                            var theta = Math.PI / 2, end = (Math.PI * 3) / 2; theta <= end; theta += Math.PI
                        ) {
                            if (this.theta < theta && this.theta + Math.PI / 200 > theta) {
                                this.theta = theta;
                                this.endTheta = true;
                                break;
                            }
                        }
                    }
                    if (!this.endPhi) {
                        for (
                            var phi = Math.PI / 8, end = (Math.PI * 7) / 8; phi <= end; phi += (Math.PI * 3) / 4
                        ) {
                            if (this.phi < phi && this.phi + Math.PI / 200 > phi) {
                                this.phi = Math.PI / 8;
                                this.endPhi = true;
                                break;
                            }
                        }
                    }
                }
                if (!this.endTheta) {
                    if (axis.y == this.thresholdY) {
                        this.theta +=
                            (Math.PI / 200) *
                            (this.theta < Math.PI / 2 ||
                                (this.theta >= Math.PI && this.theta < (Math.PI * 3) / 2) ?
                                1 :
                                -1);
                    } else {
                        this.theta += Math.PI / 500;
                    }
                    this.theta %= Math.PI * 2;
                }
                if (this.endPhi) {
                    if (this.rippleCount == this.MAX_RIPPLE_COUNT) {
                        this.psi += this.dpsi;
                        this.psi %= Math.PI * 2;
                    }
                } else {
                    this.phi += Math.PI / (axis.y == this.thresholdY ? 200 : 500);
                    this.phi %= Math.PI;
                }
                if (this.y <= -this.renderer.height * this.SURFACE_RATE) {
                    this.x += 2;
                    this.y = -this.renderer.height * this.SURFACE_RATE;
                } else {
                    this.x += this.vx;
                    this.y += this.vy;
                }
                return (
                    this.z > -this.FOCUS_POSITION &&
                    this.z < this.FAR_LIMIT &&
                    this.x < this.renderer.width * 1.5
                );
            }
        };
        $(function () {
            console.log(6666);
            RENDERER.init();
        });
    </script>
    <style>
        html,
        body {
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
            overflow: hidden;
        }

        .container {
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
            background-color: #000000;
        }
    </style>
</body>

</html>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 320
  • 321
  • 322
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329
  • 330
  • 331
  • 332
  • 333
  • 334
  • 335
  • 336
  • 337
  • 338
  • 339
  • 340
  • 341
  • 342
  • 343
  • 344
  • 345
  • 346
  • 347
  • 348
  • 349
  • 350
  • 351
  • 352
  • 353
  • 354
  • 355
  • 356
  • 357
  • 358
  • 359
  • 360
  • 361
  • 362
  • 363
  • 364
  • 365
  • 366
  • 367
  • 368
  • 369
  • 370
  • 371
  • 372
  • 373
  • 374
  • 375
  • 376
  • 377
  • 378
  • 379
  • 380
  • 381
  • 382
  • 383
  • 384
  • 385
  • 386
  • 387
  • 388
  • 389
  • 390
  • 391
  • 392
  • 393
  • 394
  • 395
  • 396
  • 397
  • 398
  • 399
  • 400
  • 401
  • 402
  • 403
  • 404
  • 405
  • 406
  • 407
  • 408
  • 409
  • 410
  • 411
  • 412
  • 413
  • 414
  • 415
  • 416
  • 417
  • 418
  • 419
  • 420
  • 421
  • 422
  • 423
  • 424
  • 425
  • 426
  • 427
  • 428
  • 429
  • 430
  • 431
  • 432
  • 433
  • 434
  • 435
  • 436
  • 437
  • 438
  • 439
  • 440
  • 441
  • 442
  • 443
  • 444
  • 445
  • 446
  • 447
  • 448
  • 449
  • 450
  • 451
  • 452
  • 453
  • 454
  • 455
  • 456
  • 457
  • 458
  • 459
  • 460
  • 461
  • 462
  • 463
  • 464
  • 465
  • 466
  • 467
  • 468
  • 469
  • 470
  • 471

安装插件live server在这里插入图片描述

使用插件运行程序

在这里插入图片描述


在这里插入图片描述

关注微信公众号「 ClassmateJie
更多惊喜等待你的发掘
​ ​
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/90817
推荐阅读