原神5.1前瞻网页HTML+CSS+JS

news2024/11/25 13:10:45

  这篇文章主要是总结一下我在制作页面的时候用到的一些技术以及经验总结,博主也是第一次写网页,代码也是在不断地“进化”,哪里写的不好大家可以随意指出。

  下面就是一些经验总结,如果想看具体效果我这里也不好展示,需要的可以看b站上的视频:

HTML+CSS+JS试做原神5.1前端网页_哔哩哔哩_bilibili,不想看我唠嗑的直接看最后我会放网盘链接。

   1.布局(开头)

  我们很多人刚学完HTML+CSS就非常手痒想要做一下自己的网页,但刚开始发现不知道该怎么上手,也就是最开始的布局不知道怎么写比较好。这里我主要讲一下两种情况:

记得最开始放一段代码(可以有效删除元素的内外边距,有助于后面布局):

* {
    margin: 0;
    padding: 0;
}

  1.普通页面,也就是会出现滚轮条,可以直接上下拉动

这种界面没什么好说的,直接无脑往上放div即可,如果你还是不放心,我们可以指定

overflow-x: hidden;

意思就是说我们的横向如果有内容超出了,就不会显示,然后指定一个具体的宽度,一般屏幕的默认大小是1912×954,高度可以不用管。然后就可以div盒子往里面加采用一般的流式布局即可。

  2.整块滑动的界面(没有滚动条,上下滑动时一整块界面一起动)

例如这样:

这边我的思路是这样的:我们对整个界面分块处理,用一个大盒子包裹

也就是直接设置上图box的高度,里面的盒子全部采用定位的布局方式,然后我们直接指定盒子的宽高,最后只需要使用js在每次滑动界面的时候,修改每个和盒子的top即可(大概就是这样)

elements.forEach(function (elementId) {
        document.getElementById(elementId).addEventListener('mousewheel', function (e) {
            e = e || window.event;
            if (!canScroll)
                return;
            canScroll = false;
            setTimeout(function () {
                canScroll = true;
            }, 500); // 设置响应时间间隔,这里是1秒
            if (e.wheelDelta > 0) { //当滑轮向上滚动时  
                console.log("滑轮向上滚动" + num);
                if (num == 5 || yunxugundong == false) {
                    return;
                }
                else {
                    num = num + 1;
                    $(".header").animate({
                        top: '+=954px',
                    });
                    $(".bg2").animate({
                        top: '+=954px',
                    });
                    $(".bg3").animate({
                        top: '+=954px',
                    });
                    $(".bg4").animate({
                        top: '+=954px',
                    });
                    $(".bg5").animate({
                        top: '+=954px',
                    });
                    $(".bg6").animate({
                        top: '+=954px',
                    });
                }
            }
            if (e.wheelDelta < 0) { //当滑轮向下滚动时
                console.log("滑轮向下滚动" + num);
                if (num <= 0 || yunxugundong == false) {
                    if (yunxugundong == false)
                        return;
                    else if (num <= 0) {
                        const element = document.querySelector('.bg6');
                        element.style.animation = 'bounce 0.5s ease alternate';
                        setTimeout(function () {
                            element.style.animation = '';
                        }, 500);
                    }
                }
                else {
                    num = num - 1;
                    $(".header").animate({
                        top: '-=954px',
                    });
                    $(".bg2").animate({
                        top: '-=954px',
                    });
                    $(".bg3").animate({
                        top: '-=954px',
                    });
                    $(".bg4").animate({
                        top: '-=954px',
                    });
                    $(".bg5").animate({
                        top: '-=954px',
                    });
                    $(".bg6").animate({
                        top: '-=954px',
                    });
                }
            }
        });
    });

,如果是横向的也可以这么做,只需要指定宽度变化即可,虽然代码比较史但是胜在好理解,改起来也比较方便。

2.背景以及图片布置

界面中有很多地方都是图片,我的建议是没有特殊的要求全都布置成div容器的backgrou-image,这样子比较方便管理也比较简单,直接加入图片然后指定图片的宽高全部都是100%,也就是铺满整个容器,这样子直接通过div容器就可以修改图片大小,除非是有特殊的需求,再将img容器放到div容器里面,但是这样子就需要设置img容器的布局方式以及具体位置,还是比较麻烦的,比较适合处理相对复杂的情况。

3.一些动画效果的实现原理

1.出现黑色背景里面放一张图片

such as:

这个实际上非常简单,就是你提前先布置好一个黑色背景并且设置好透明度,然后往里面提前写好东西,再把它隐藏了,当你点击某个按钮的时候就会直接修改display: none;就会直接显现。同时我们可以再js里面设置点击整个黑色背景的时候就消失,这样同时解决了我们打开这个额外的界面的时候点击除了视频以外的部分就会直接关闭的效果。

这里有几点需要注意:

1.我们在打开界面的时候滚轮是不能动的,因此我多设置了一个变量来约束滚轮是否会执行上下滚动(js代码里面有).

2.重新打开视频的时候视频会重新播放,这就需要我们在关闭或者开启的时候将视频重新归0,值得注意的是我们在关闭界面的时候一定要暂停视频,否则视频依旧会继续播放.

3.这个额外的界面我的建议是写在bg2盒子的第一个子级位置,such as:

<div class="bg2" id="bg2">
            <div class="bg2-box">
                <div class="img1" id="bg2-bg2-box-img1" onmouseover="changeImage2()" onmouseout="resetImage2()"><img
                        src="../image/huache1.webp" id="bg2-img1" style="width: 335.47px;height: 255.77px;"></div>
                <div class="img2" id="bg2-bg2-box-img2" onmouseover="changeImage3()" onmouseout="resetImage3()"><img
                        src="../image/mengyuxianshi.webp" id="bg2-img2" style="width: 335.47px;height: 255.77px;"></div>
                <div class="img3" id="bg2-bg2-box-img3" onmouseover="changeImage4()" onmouseout="resetImage4()"><img
                        src="../image/qishi.webp" id="bg2-img3" style="width: 335.47px;height: 255.77px;"></div>
            </div>
            <div class="bg2-blackground1">
                <div class="huache-video"></div>
                <div class="huache-video-border"></div>
                <div class="huache-video-footer"></div>
                <div class="video1">
                    <video src="../image/huache-video.mp4" autoplay muted loop
                        style="width: 100%; height: 100%;"></video>
                </div>
            </div>
            <div class="bg2-blackground2">
                <div class="mengyuxianshi-video-header"></div>
                <div class="huache-video-border"></div>
                <div class="mengyuxianshi-video-footer"></div>
                <div class="video1">
                    <video src="../image/mengyuxianshi.mp4" autoplay muted loop
                        style="width: 100%; height: 100%;"></video>
                </div>
            </div>
            <div class="bg2-blackground3">
                <div class="qishi-video-header"></div>
                <div class="huache-video-border"></div>
                <div class="qishi-video-footer"></div>
                <div class="video1">
                    <video src="../image/qishi.mp4" autoplay muted loop style="width: 100%; height: 100%;"></video>
                </div>
            </div>
        </div>

 跟其它盒子平级,这样做的优点是什么呢,就是我们可以随时修改z-index来保证这个界面一定是在所有子级的上面.

(下面是举例代码)

<div class="bg2-blackground3">
                <div class="qishi-video-header"></div>
                <div class="huache-video-border"></div>
                <div class="qishi-video-footer"></div>
                <div class="video1">
                    <video src="../image/qishi.mp4" autoplay muted loop style="width: 100%; height: 100%;"></video>
                </div>
            </div>

css代码:

.bg2 .bg2-blackground3 {
    z-index: 100;
    position: absolute;
    top: 0;
    left: 0px;
    width: 2208px;
    height: 954px;
    background-color: rgba(0, 0, 0, 0.7);
    display: none;
}

js代码:

$(".bg2 .img3").click(function () {
        $(".bg2 .bg2-blackground3 .video1 video").get(0).currentTime = 0;
        $(".bg2 .bg2-blackground3 .video1 video").trigger("play");
        $(".bg2 .bg2-blackground3").show();
        yunxugundong = false;
    })
    $(".bg2 .bg2-blackground3").click(function () {
        $(".bg2 .bg2-blackground3 .video1 video").trigger("pause");
        $(".bg2 .bg2-blackground3").hide();
        yunxugundong = true;
    })

2.模块化设计

举个例子,当出现这一类情况:

除了下面的按钮以及上面的角色情报这个标题不用变化,是不是其它都需要变化,那么我们就可以把上面的人物简介以及右边的人物立绘设置成一个容器,通过js点击不同按钮的时候直接修改其中的图片即可,可以直接去看我里面的代码实现.

3.轮播图

虽然网上有很多控件都可以实现轮播图,但是我们也必须要学会怎么手写轮播图,这样以便我们可以实现更加复杂的效果:

 原理也很简单,就是提前设置好所需要的容器,然后设置好图片的样式,最后通过js实现(我靠我这说了跟没说一样,其中的核心是css样式的设计)

献上代码(可以直接作为模板套用):

html

<div class="bg6" id="bg6">
            <div class="bg6-header"></div>
            <div class="bg6-wrap">
                <div class=" swipe1"></div>
                <div class=" swipe2"></div>
                <div class=" swipe3"></div>
                <div class=" swipe4"></div>
                <div class=" swipe5"></div>
                <div class=" swipe6"></div>
                <div class=" swipe7"></div>
            </div>
            <div class="turn">
                <div class="prev">
                    <img src="../image/bg6-left.png" alt="">
                    <img src="../image/bg6-left2.png" alt="">
                </div>
                <div class="next">
                    <img src="../image/bg6-right.png" alt="">
                    <img src="../image/bg6-right2.png" alt="">
                </div>
            </div>
            <ul class="swipe-index">
                <li>
                    <img src="../image/button2.png" alt="">
                    <img src="../image/button1.png" alt="">
                </li>
                <li>
                    <img src="../image/button2.png" alt="">
                    <img src="../image/button1.png" alt="">
                </li>
                <li>
                    <img src="../image/button2.png" alt="">
                    <img src="../image/button1.png" alt="">
                </li>
                <li>
                    <img src="../image/button2.png" alt="">
                    <img src="../image/button1.png" alt="">
                </li>
                <li>
                    <img src="../image/button2.png" alt="">
                    <img src="../image/button1.png" alt="">
                </li>
                <li>
                    <img src="../image/button2.png" alt="">
                    <img src="../image/button1.png" alt="">
                </li>
                <li>
                    <img src="../image/button2.png" alt="">
                    <img src="../image/button1.png" alt="">
                </li>
            </ul>
            <ul class="img-index">
                <li>
                    <img src="../image/weibo.png" alt="">
                </li>
                <li>
                    <img src="../image/weixin.png" alt="">
                </li>
                <li>
                    <img src="../image/bili.png" alt="">
                </li>
                <li>
                    <img src="../image/mhy.png" alt="">
                </li>
            </ul>
            <div class="bg6-blackground">
                <div class="weixinjietu">
                    <img src="../image/weixin-erweima.webp" alt="">
                </div>
                <div class="bg6-text">- 官方微信号 -</div>
            </div>
        </div>

css:

.bg6-wrap {
    position: absolute;
    top: 20%;
    width: 100%;
    height: 466px;
    font-size: 89.7222px;
}

.bg6-wrap div {
    position: absolute;
    left: calc(50% - 4.845em);
    width: 9.69em;
    height: 5.46em;
    transition: all .4s;
    background-size: 100% 100%;
}

.bg6-wrap div:nth-child(1) {
    background-image: url(../image/bg6-1.png);
}

.bg6-wrap div:nth-child(2) {
    background-image: url(../image/bg6-2.png);
}

.bg6-wrap div:nth-child(3) {
    background-image: url(../image/bg6-3.png);
}

.bg6-wrap div:nth-child(4) {
    background-image: url(../image/bg6-4.png);
}

.bg6-wrap div:nth-child(5) {
    background-image: url(../image/bg6-5.png);
}

.bg6-wrap div:nth-child(6) {
    background-image: url(../image/bg6-6.png);
}

.bg6-wrap div:nth-child(7) {
    background-image: url(../image/bg6-7.png);
}

.swipe1 {
    z-index: 2;
    transform: translateX(0) scale(1);
    opacity: 1;
}

.swipe2 {
    z-index: 1;
    transform: translateX(3em) scale(0.7);
    opacity: 1;
}

.swipe3 {
    z-index: 0;
    transform: translateX(3em) scale(0.4);
    opacity: 0;
}

.swipe4 {
    z-index: 0;
    transform: translateX(0) scale(1);
    opacity: 0;
}

.swipe5 {
    z-index: 0;
    transform: translateX(-3em) scale(0.4);
    opacity: 0;
}

.swipe6 {
    z-index: 0;
    transform: translateX(-3em) scale(0.4);
    opacity: 0;
}

.swipe7 {
    z-index: 1;
    transform: translateX(-3em) scale(0.7);
    opacity: 1;
}


.turn {
    z-index: 3;
    position: absolute;
    left: 22%;
    top: 40%;
    width: 1000px;
    height: 82.14px;
    display: flex;
    justify-content: space-between;
}

.prev,
.next {
    position: relative;
    width: 98.05px;
    height: 82.14px;
    cursor: pointer;
}

.prev img,
.next img {
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
}

.prev img:nth-child(2),
.next img:nth-child(2) {
    display: none;
}


.swipe-index {
    position: absolute;
    top: 70%;
    width: 100%;
    height: 28.7px;
    display: flex;
    justify-content: center;
}

ul {
    list-style: none;
}

.swipe-index li {
    position: relative;
    width: 32px;
    height: 28.7px;
    margin-left: 30px;
}

.swipe-index li img {
    position: absolute;
    top: 0;
    left: 0;
    width: auto;
    height: 28.7px;
    cursor: pointer;
}

.swipe-index li img:nth-of-type(2) {
    display: none;
}

.swipe-index li:first-child img:nth-of-type(2) {
    display: block;
}

.img-index {
    position: absolute;
    left: -8%;
    bottom: 10%;
    width: 100%;
    height: 103.6px;
    display: flex;
    justify-content: center;
}

.img-index li {
    position: relative;
    width: 32px;
    height: 28.7px;
    margin-left: 200px;
}

.img-index li img {
    position: absolute;
    top: 0;
    left: 0;
    width: auto;
    height: 103.6px;
    cursor: pointer;
}

js:

let swipeStyle = ["swipe1", "swipe2", "swipe3", "swipe4", "swipe5", "swipe6", "swipe7"];
    //游戏特色模块
    $(".turn").children().mouseenter(function () {
        $(this).children().eq(1).show()
        $(this).children().eq(0).hide()
    });
    $(".turn").children().mouseleave(function () {
        $(this).children().eq(1).hide()
        $(this).children().eq(0).show()
    });
    let featureAnimation = setInterval(next, 5000);
    $(".turn").children().click(function () {
        clearInterval(featureAnimation);
        if ($(this).attr("class") == "next") {
            next();
        } else if ($(this).attr("class") == "prev") {
            prev();
        }
        featureAnimation = setInterval(next, 5000);
    });
    function next() {
        swipeStyle.unshift(swipeStyle.pop());
        feature = swipeStyle.indexOf("swipe1");
        for (let i = 0; i < 7; i++) {
            $(".bg6-wrap div").eq(i).attr("class", swipeStyle[i]);
            if (i == feature) {
                $(".swipe-index li").eq(i).children().eq(1).show();
            } else {
                $(".swipe-index li").eq(i).children().eq(1).hide();
            }
        }
    }
    function prev() {
        swipeStyle.push(swipeStyle.shift());
        feature = swipeStyle.indexOf("swipe1");
        for (let i = 0; i < 7; i++) {
            $(".bg6-wrap div").eq(i).attr("class", swipeStyle[i]);
            if (i == feature) {
                $(".swipe-index li").eq(i).children().eq(1).show();
            } else {
                $(".swipe-index li").eq(i).children().eq(1).hide();
            }
        }
    }

    $(".swipe-index li").mouseenter(function () {
        if (feature == $(this).index()) {
            return;
        } else {
            $(this).children().eq(1).show();
        }
    });
    $(".swipe-index li").mouseleave(function () {
        if (feature == $(this).index()) {
            return;
        } else {
            $(this).children().eq(1).hide();
        }
    });
    $(".swipe-index li").click(function () {
        clearInterval(featureAnimation);
        if (feature == $(this).index()) {
            featureAnimation = setInterval(next, 5000);
            return;
        } else {
            let count = feature - $(this).index()
            console.log(count)
            if (count > 0) {
                for (let i = 0; i < count; i++) {
                    prev();
                }
            } else {
                for (let i = 0; i < -count; i++) {
                    next();
                }
            }
        }
        featureAnimation = setInterval(next, 5000);
    });

4.总结 

反正就是说,如果想要写好一个界面就必须要上手去写,初学者可以不需要一定要遵守某些原则:例如代码写的多规范,网页布局一定要怎么样等等。网页制作本来就是一个发挥创造和想象的过程,如果说为了遵循条条框框导致自己网页布局千疮百孔那不如不要,网页制作我们又不需要看源码,只需要看到效果即可。

最后给出一点经验总结:

1.图片和装它的容器尽可能一样大。

2.别惦记着你那float了,现在是flex和position的天下,反正布局不了解遇事不决直接定位,直接上绝对定位,top、left、righ、bottom四个位置总有适合你的,大不了就一点一点量过去反正效果到位就行了。

3.多看别人的优秀代码,汲取一下别人的设计思路,前期我们初学者不需要写的有多好,例如像别人的代码就一定会有css样式复用,用到了层叠性和继承性,我们可能分析不出那么多东西。唉那我就不分析了,每写一个div我就设置一个class,这样谁也影响不了谁,注意命名别重复了就行,这边建议采取xxx-xxxx-xxx的命名方式,不容易搞混。

ok最后献上源码:链接:https://pan.baidu.com/s/1zs28JNV-nMSSov4qrfX39g 
提取码:1gl4 

后续我会继续改进界面,加入官网的界面以及一些后端知识的运用,如果有什么地方不明白或者哪里做的不好误人子弟了大家可以随意指出,尽情地鞭策我吧!!如果觉得还行可以点个关注吗??

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2195260.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pytorch导入数据集

1、概念&#xff1a; Dataset&#xff1a;一种数据结构&#xff0c;存储数据及其标签 Dataloader&#xff1a;一种工具&#xff0c;可以将Dataset里的数据分批、打乱、批量加载并进行迭代等 &#xff08;方便模型训练和验证&#xff09; Dataset就像一个大书架&#xff0c;存…

QSerialPort 串口通信示例

之前使用过MFC写过串口通信的示例&#xff0c;今年学了Qt&#xff0c;特意使用Qt写了串口通信的示例&#xff0c;发现比MFC要容易一些&#xff0c; MFC串口示例如下&#xff1a; Qt示例如下&#xff1a; Qt这个做的很简单&#xff0c;主要还是想验证一下api&#xff0c; 核心…

今日指数day8实战补充(上)

1.用户管理 1.多条件综合查询 1.1 多条件综合查询接口说明 1&#xff09;原型效果 2&#xff09;接口说明 功能描述&#xff1a;多条件综合查询用户分页信息&#xff0c;条件包含&#xff1a;分页信息 用户创建日期范围 服务路径&#xff1a;/api/users 服务方法&#xff1…

Linux的Tomcat安装部署

1.下载jdk11 java11的官方URL 此时进入可能会有登录注册,挺简单的,注册登录就好 2.上传到Linux 3.解压 命令: tar -zxvf /root/linux.jdk/jdk-11.0.24_linux-x64_bin.tar.gz 4.移动解压文件夹到新建文件夹 新建文件夹: mkdir -p /export/server 移动命令: mv jdk-11.0…

联想服务器配置阵列、安装操作系统

文章目录 [toc]1.配置阵列2.制作启动盘3.安装系统 1.配置阵列 1.根据提示进入BIOS设置&#xff08;F1&#xff09; 2.系统设置 3.存储 4.第四步可以看到raid卡信息 5.Main Menu 6.Configuration Management 7.Create Virtual Drive 8.Select RAID Level raid5 9.Select Drives…

透明物体的投射和接收阴影

1、让透明度测试Shader投射阴影 &#xff08;1&#xff09;同样我们使用FallBack的形式投射阴影&#xff0c;但是需要注意的是&#xff0c;FallBack的内容为&#xff1a;Transparent / Cutout / VertexLit&#xff0c;该默认Shader中会把裁剪后的物体深度信息写入到 阴影映射纹…

降重秘籍:如何利用ChatGPT将重复率从45%降至10%以下?

AIPaperGPT&#xff0c;论文写作神器~ https://www.aipapergpt.com/ 重复率高达45%&#xff1f;很多人一查论文的重复率&#xff0c;瞬间想“完了&#xff0c;这次真的要重写了”。但其实不用这么绝望&#xff01;有了ChatGPT&#xff0c;降重真的没那么难。今天就教你几招&a…

VGG16模型实现MNIST图像分类

MNIST图像数据集 MNIST&#xff08;Modified National Institute of Standards and Technology&#xff09;是一个经典的机器学习数据集&#xff0c;常用于训练和测试图像处理和机器学习算法&#xff0c;特别是在数字识别领域。该数据集包含了大约 7 万张手写数字图片&#xf…

wsl环境下安装MySQL5.7

安装操作需root权限&#xff1a; 1-通过 sudo su - &#xff0c;切换到root用户。 2-在每一个命令前加上sudo&#xff0c;临时提升权限 1、下载apt仓库文件 wget https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb 安装包是.deb的文件2、配置仓库&#xff0c;使…

MyBatis 批量插入方案

MyBatis 批量插入 MyBatis 插入数据的方法有几种&#xff1a; for 循环&#xff0c;每次都重新连接一次数据库&#xff0c;每次只插入一条数据。 在编写 sql 时用 for each 标签&#xff0c;建立一次数据库连接。 使用 MyBatis 的 batchInsert 方法。 下面是方法 1 和 2 的…

Linux防火墙-案例(一)filter表

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们经过上小章节讲了Linux的部分进阶命令&#xff0c;我们接下来一章节来讲讲Linux防火墙。由于目前以云服务器为主&#x…

51单片机的水位检测系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块水位传感器继电器LED、按键和蜂鸣器等模块构成。适用于水位监测、水位控制、水位检测相似项目。 可实现功能: 1、LCD1602实时显示水位高度 2、水位传感器采集水位高度 3、按键可设置水位的下限 4、按键可手动加…

动手学大模型应用开发之大模型简介

动手学大模型应用开发之大模型简介 主要学习目标什么是大语言模型大模型的能力和特点涌现能力作为基座模型支持多元应用的能力支持对话作为统一入口的能力大模型特点 常见大模型ChatGpt通义千问 LangChainLangChain的核心模块 总结相关学习链接 主要学习目标 学习如何进行大模…

【AI知识点】激活函数(Activation Function)

激活函数&#xff08;Activation Function&#xff09; 是神经网络中的一个关键组件&#xff0c;负责将输入的线性组合转化为非线性输出。它赋予神经网络模型以复杂的表达能力&#xff0c;使其能够处理非线性问题&#xff0c;比如分类、图像识别和自然语言处理等任务。 1. 激活…

【redis-06】redis的stream流实现消息中间件

redis系列整体栏目 内容链接地址【一】redis基本数据类型和使用场景https://zhenghuisheng.blog.csdn.net/article/details/142406325【二】redis的持久化机制和原理https://zhenghuisheng.blog.csdn.net/article/details/142441756【三】redis缓存穿透、缓存击穿、缓存雪崩htt…

Spring Boot:医院管理的数字化转型

5系统详细实现 5.1 医生模块的实现 5.1.1 病床信息管理 医院管理系统的医生可以管理病床信息&#xff0c;可以对病床信息添加修改删除操作。具体界面的展示如图5.1所示。 图5.1 病床信息管理界面 5.1.2 药房信息管理 医生可以对药房信息进行添加&#xff0c;修改&#xff0c;…

今日指数day8实战补充用户管理模块(下)

ps : 由于前端将userId封装为BigInt类型 , 导致有精度损失, 传入的userId不正确 , 部分功能无法正确实现 , 但是代码已经完善 1.4 更新用户角色信息接口说明 1&#xff09;原型效果 2&#xff09;接口说明 功能描述&#xff1a;更新用户角色信息 服务路径&#xff1a;/user/…

基于FPGA的ov5640摄像头图像采集(二)

之前讲过ov5640摄像头图像采集&#xff0c;但是只包了的摄像头驱动与数据对齐两部分&#xff0c;但是由于摄像头输入的像素时钟与HDMI输出的驱动时钟并不相同&#xff0c;所有需要利用DDR3来将像素数据进行缓存再将像素数据从DDR3中读出&#xff0c;对DDR3的读写参考米联客的IP…

别再为日期时间头疼了!Python datetime模块助你高效搞定一切时间问题,让你的代码从此与时间赛跑,快人一步!

博客主页&#xff1a;长风清留扬-CSDN博客系列专栏&#xff1a;Python基础专栏每天更新大数据相关方面的技术&#xff0c;分享自己的实战工作经验和学习总结&#xff0c;尽量帮助大家解决更多问题和学习更多新知识&#xff0c;欢迎评论区分享自己的看法感谢大家点赞&#x1f44…

花半小时用豆包Marscode 和 Supabase免费部署了一个远程工作的导航站

以下是「 豆包MarsCode 体验官」优秀文章&#xff0c;作者谦哥。 &#x1f680; 项目地址&#xff1a;remotejobs.justidea.cn/ &#x1f680; 项目截图&#xff1a; 数据处理 感谢开源项目&#xff1a;https://github.com/remoteintech/remote-jobs 网站信息获取&#xff1…