一丶需求分析
1.完成静态页面
2.样式的编撰和优化

3.添加页面动作(js)
二丶 项目设计
设计取决于你自己的看法和创意,做出什么样的网页都是看个人,每个人学的代码和网页呈现肯定还会有所误差,有一些部份没有图片,比较狭小,仅供参考!!!

三丶项目编码四丶小模块源码
 html代码: 
 
 <header>
        <div class="logo">
            
        div>
        <div class="column">
            <ul>
                <li><a href="#">知识资产库a>li>
                <li><a href="#">知识专题a>li>
                <li><a href="#">知识地图a>li>
                <li><a href="#">社区a>li>
            ul>
        div>
        <form class="search">
            <input type="text" placeholder="请输入内容">
            <button>提交button>
        form>
        <div class="upload">
            上传知识
        div>
        <div class="profile">
            <div class="ring">div>
                <div class="hp">
            div>
        div>
        header>
<main>
    <div class="article">
        <section class="art-head">
            <div class="art-hp">
                <img src="./img/2.webp" alt="">
            div>
            <div class="art-name">
                <h4>小白先生h4>
                <p>硬件技术部p>
            div>
            <div class="art-follow">关注div>
        section>
        <div class="art-content">
            <div class="wenben">
                <h4>【 新征文活动即将上线!~ 今天先来沸点盖楼抽奖!】h4>
                <p> “程序员必懂小知识”创作挑战,你可以分享:对程序员很重要的小知识点、实践及踩坑经验、社区 的好用的技术工具、刷题找到了独特的思路,等等。专门为写作困难症同学设计,解决你的一切写 作问题,轻轻松松拿大奖!p>
                <p>>> 活动详情:juejin.cn p>
                <p> 今天,先来沸点盖楼抽奖预热一下吧,p>
                <p> --  沸点盖楼活动规则:p>
                <p> - 在本条下方评论关键词【9月24日分享小知识】,即可参与抽奖(注意关键词没有空格)。p>
                <p>- 盖楼时间:即日起至 9 月 18 日 23:59:59  盖楼活动奖励:抽取 3 人,每人一个掘金抱枕p>
                <p>⏰ 开奖时间:9 月 19 日,请大家提前扫码进群,并留意群内通知和系统消息,以免错过发奖~ [加好友] 进群方式:扫描图 2 ,添加掘金酱为好友,回复关键词“小知识”进群。p>
            div>
            <img src="./img/1.webp" alt="">
            <div class="ach">
                <div class="lab">摸鱼选手div>
                <p>126人表达了态度 p>
            div>
            <div class="art-bottom">
                <div class="time">
                    今天13:39
                div>
                <div class="degree">
                    <div class="thumb">
                        <span>span>1458
                    div>
                    <div class="reply">
                        <span>span>3270
                    div>
                div>
            div>
        div>
        <footer class="comment">
            <div class="comment-in">
                <img src="./img/2.webp" alt="">
                <textarea name="reply" id="" cols="20" rows="1" placeholder="发表你的看法">textarea>
                <button>发表button>
            div>
            <div class="all-comment">
                <div class="all-c-top">
                    <h3>全部评论h3>
                    <ul>
                        <li class="hot">最热li>
                        <li class="early">最早li>
                        <li class="new">最新li>
                    ul>
                div>
                <div class="all-comment-items">
                    <ul class="comtent-items">
                    ul>
                div>
                <input type="text"  placeholder="">
            div>
        footer>
    div>
main>
复制代码
css代码:
     @font-face {
        font-family: 'iconfont';
        src: url('../font_41hjo1ecyhb/iconfont.ttf') format('truetype');
    }
    .iconfont {
        font-family: "iconfont" !important;
        font-size: 16px;
        font-style: normal;
        -webkit-font-smoothing: antialiased;
        -moz-osx-font-smoothing: grayscale;
    }
    * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
    }
    li {
        list-style: none;
    }
    a {
        text-decoration: none;
    }
    body {
        background-color: gray;
        width: 100%;
    }
    @keyframes headerOpacity {}
    header {
        display: flex;
        width: 100%;
        height: 56px;
        line-height: 56px;
        background-color: #F39800;
        padding: 0 18%;
        margin-bottom: 20px;
    }
    .logo {
        flex-shrink: 0;
        width: 95px;
        height: 40px;
        margin: auto 0;
        margin-right: 50px;
        background-color: #fff;
    }
    .logo img {
        width: 100%;
        height: 100%;
        border-radius: 10px;
    }
    .column {
        margin-right: 30px;
        flex: 1;
        overflow: hidden;
    }
    .column ul li {
        float: left;
        padding: 0 10px;
        margin: 0 10px;
    }
    .column ul li a {
        color: #000;
    }
    .column ul li:hover {
        background-color: #c07c06;
    }
    .search {
        width: 20%;
        height: 65%;
        margin: auto 0;
        margin-right: 20px;
        background-color: #fff;
        border-radius: 20px;
        overflow: hidden;
    }
    .search input {
        display: block;
        float: left;
        width: 60%;
        height: 75%;
        border: none;
        outline: none;
        border-radius: 10px;
        margin: 5px 0 0 10px;
        padding-left: 10px;
    }
    .search button {
        float: right;
        width: 19%;
        height: 80%;
        margin-top: 3px;
        margin-right: 6px;
        outline: none;
        border: none;
        border-radius: 20px;
        background-color: #f39800;
        color: #fff;
        cursor: pointer;
    }
    .upload {
        width: 6%;
        height: 65%;
        line-height: 35px;
        margin: auto 0;
        text-align: center;
        border-radius: 15px;
        color: #f39800;
        background-color: #fff;
        font-size: 14px;
        margin-right: 30px;
        cursor: pointer;
        overflow: hidden;
    }
    .profile {
        position: relative;
        padding-left: 30px;
    }
    .profile .ring {
        position: absolute;
        top: 8px;
        left: -10px;
        margin-top: 20px;
        width: 16px;
        height: 16px;
        line-height: 0;
        margin-right: 10px;
        font-family: 'iconfont';
        font-size: 30px;
        color: #fff;
        cursor: pointer;
    }
    .profile .hp {
        float: right;
        width: 36px;
        height: 36px;
        border-radius: 50%;
        margin-top: 10px;
        background-color: #fff;
        background: url(../img/2.webp) no-repeat center center;
        cursor: pointer;
    }
    
    
复制代码
main {
    width: 47%;
    height: auto;
    margin: 0 auto;
}
@media screen and (max-width:450px) {
    .main {
        width: 90%;
        height: auto;
        margin: 0 auto;
    }
}
.article {
    padding: 15px;
    background-color: #fff;
    border-radius: 8px;
}
.article section {
    display: flex;
    height: 60px;
}
.art-hp {
    width: 60px;
    height: 60px;
    border-radius: 50%;
    background-color: orange;
    margin-right: 10px;
    cursor: pointer;
}
.art-hp img {
    width: 100%;
    height: 100%;
    border-radius: 50%;
}
.art-name {
    flex: 1;
    padding-top: 9px;
    cursor: pointer;
}
.art-name p {
    font-size: 10px;
    color: gray;
    margin-top: 4px;
}
.art-follow {
    float: right;
    width: 48px;
    height: 24px;
    line-height: 24px;
    text-align: center;
    font-size: 12px;
    margin: auto 0;
    background-color: #f39800;
    color: #fff;
    border-radius: 20px;
    cursor: pointer;
}
.art-follow2 {
    float: right;
    width: 48px;
    height: 24px;
    line-height: 24px;
    text-align: center;
    font-size: 12px;
    margin: auto 0;
    background-color: #fff;
    color: #666;
    border: 1px solid #666;
    border-radius: 20px;
    cursor: pointer;
}
.art-content {
    padding: 0 20px 0 80px;
    padding-bottom: 30px;
}
.art-content h4 {
    margin-bottom: 20px;
}
.art-content p {
    margin-bottom: 18px;
}
.art-content img {
    width: 40%;
    height: auto;
    border-radius: 8px;
    margin: 5px 0;
}
.ach {
    margin: 10px 0;
    height: 30px;
}
.ach .lab {
    float: left;
    width: 76px;
    height: 28px;
    line-height: 28px;
    text-align: center;
    border-radius: 35px 35px 35px 2px;
    border: 1px solid #F39800;
    background: rgba(243, 152, 0, 0.10);
    color: #F39800;
    cursor: pointer;
}
.ach p {
    float: right;
    color: #BDC3C7;
}
.art-bottom {
    width: 100%;
    height: 30px;
}
.time {
    float: left;
    font-family: PingFangSC-Regular;
    font-size: 16px;
    color: #BDC3C7;
    letter-spacing: 0;
    line-height: 24px;
}
.degree {
    float: right;
}
.degree .thumb {
    user-select: none;
    float: left;
    margin-right: 14px;
    cursor: pointer;
}
.degree .reply {
    user-select: none;
    float: right;
    cursor: pointer;
}
.degree span {
    display: inline-block;
    width: 21px;
    height: 21px;
    margin-right: 4px;
    font-family: "iconfont";
    font-size: 20px;
    margin-top: 1px;
}
.comment {
    margin-bottom: 50px;
    padding: 0 20px;
}
.comment-in {
    display: flex;
    position: relative;
    height: 60px;
}
.comment-in img {
    flex-shrink: 0;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    vertical-align: top;
    margin: 12px 5px 0 0;
}
.comment-in textarea {
    flex: 1;
    width: 90%;
    height: 60px;
    resize: none;
    border: 0;
    outline: none;
    background-color: #F5F7FA;
    border-radius: 10px;
    padding-left: 5px;
    padding-top: 20px;
    font-size: 16px;
}
.comment-in button {
    position: absolute;
    bottom: -35px;
    right: 5px;
    width: 60px;
    height: 30px;
    background-color: #f39800;
    color: #fff;
    outline: none;
    border: none;
    border-radius: 4px;
}
.all-c-top {
    margin-top: 50px;
    margin-bottom: 10px;
    height: 30px;
}
.all-c-top h3 {
    position: relative;
    float: left;
    width: 72px;
    height: 24px;
    font-size: 16px;
}
.all-c-top h3::before {
    content: '';
    position: absolute;
    top: 1px;
    left: -10px;
    width: 2px;
    height: 20px;
    background-color: #f39800;
}
.all-c-top ul {
    float: right;
}
.all-c-top ul li {
    float: left;
    position: relative;
    margin: 0 5px;
    color: #5f5e5e;
}
.all-c-top .hot {
    color: #202020;
}
.all-c-top ul li:nth-child(2)::after,
.all-c-top ul li:nth-child(3)::after {
    content: '';
    position: absolute;
    top: 4px;
    left: -5px;
    width: 2px;
    height: 16px;
    background-color: #5f5e5e;
}
.all-comment-items .item {
    padding: 0 20px;
}
.item-head {
    display: flex;
}
.item-hp {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background-color: orange;
    margin-right: 10px;
    vertical-align: bottom;
}
.item-hp img {
    width: 100%;
    height: 100%;
    border-radius: 50%;
}
.item-name {
    flex: 1;
    font-size: 14px;
}
.item-name p {
    font-size: 10px;
    color: gray;
    margin-top: 4px;
}
.item-content {
    padding: 15px 0 15px 40px;
    color: #666;
}
.item-content p {
    margin-bottom: 5px;
}
.item {
    position: relative;
    margin: 16px 0;
}
.item-bottom {
    width: 100%;
    height: 30px;
}
.item-content::after {
    content: '';
    position: absolute;
    bottom: -6px;
    right: 16px;
    width: 91%;
    height: 1px;
    background-color: #eee;
}
.answer {
    background-color: #F5F7FA;
    padding: 5px 20px;
    margin: 5px 0;
}
.answer img {
    width: 30px;
    height: 30px;
    border-radius: 50%;
    vertical-align: middle;
}
.answer p {
    display: inline-block;
    width: 65%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    vertical-align: middle;
    margin-left: 5px;
}
.answer-item {
    margin: 5px 0;
}
.answer-all {
    font-size: 14px;
    padding: 5px;
}
.active {
    color: #f39800;
}
a span {
    font-family: 'iconfont';
    color: #000;
}
.reply_ a {
    color: #000;
}
.reply_ {
    display: none;
    width: 100%;
    height: 120px;
    border-radius: 8px;
    background-color: #eee;
    padding: 5px;
    margin-bottom: 10px;
}
.reply_ #text {
    width: 100%;
    height: 65%;
    border-radius: 8px;
    padding-left: 10px;
    border: none;
    outline: none;
    margin-bottom: 5px;
}
.reply_ a {
    float: left;
    margin-right: 10px;
}
.reply_ #submit {
    float: right;
    width: 88px;
    height: 30px;
    border: none;
    outline: none;
    border-radius: 2px;
    color: #fff;
    background-color: #f39800;
}
复制代码js代码:
 //关注
        function Follow() {
            let follow = document.querySelector('.art-follow')
            follow.addEventListener('click', function() {
                if (follow.innerHTML === '关注') {
                    follow.innerHTML = '已关注'
                    follow.className = 'art-follow2'
                } else {
                    follow.innerHTML = '关注'
                    follow.className = 'art-follow'
                }
            })
        }
        Follow()
        //发表评论
        function setComment() {
            let comment_in = document.querySelector('.comment-in')
            let text = comment_in.querySelector('textarea')
            let button = comment_in.querySelector('button')
            button.addEventListener('click', function() {
                release()
            })
            text.addEventListener('keydown', function(event) {
                if (event.key === 'Enter') {
                    event.preventDefault();
                    if (text.value === "") {
                        event.returnValue = false
                    } else {
                        release()
                    }
                }
            })
            function release() {
                let content = text.value
                arr.push({
                    "img": "./img/2.webp",
                    "content": content,
                    "id": "3",
                    "content_child": ""
                })
                comment(arr)
                text.value = ''
            }
        }
        setComment()
        // 评论数据
        let arr = [{
            "img": "./img/2.webp",
            "content": "CPU相当手机的大脑,核心的运算能力。强劲的CPU可以为手机带来更高的运算能力,也会增加手机玩游戏 看电影的速度体验,CPU主要参数有2,核心数和主频,当然,这些参数也不是越大越好,合理够用即可",
            "id": "1",
            "content_child": ""
        }, {
            "img": "./img/2.webp",
            "content": "CPU相当手机的大脑,核心的运算能力。强劲的CPU可以为手机带来更高的运算能力,也会增加手机玩游戏 看电影的速度体验,CPU主要参数有2,核心数和主频,当然,这些参数也不是越大越好,合理够用即可",
            "id": "2",
            "content_child": [
                {
                    "id": "01",
                    "content_child_img": "./img/2.webp",
                    "content_child_info": "CPU相当手机的大脑,核心的运算能力。强劲的CPU可以为手机带来更高的运算能力"
                }, {
                    "id": "02",
                    "content_child_img": "./img/2.webp",
                    "content_child_info": "核心的运算能力。强劲的CPU可以为手机带来更高的运算能力"
                }, {
                    "id": "03",
                    "content_child-img": "./img/2.webp",
                    "content_child_info": "强劲的CPU可以为手机带来更高的运算能力"
                }
            ]
        }, ]
        //评论渲染
        function comment([]) {
            let items = document.querySelector('.comtent-items')
            let comment_items = document.querySelector('.comtent-items')
            for (let i = items.children.length; i < arr.length; i++) {
                let li = document.createElement('li')
                li.innerHTML = `
                                
                                    
                                        ${arr[i].img} " alt="">
                                    
                                    
                                        小白先生
                                        硬件技术部
                                    
                                
                                
                                     ${ arr[i].content }
                                    
                                     
                                    
                                        2021/08/07 11:49
                                        
                                            
                                                点赞
                                            
                                            
                                                回复
                                            
                                        
                                    
                                `
                li.className = " item item" + "0" + parseInt(i + 1)
                items.appendChild(li)
                let item_content = document.querySelectorAll('.item-content')
                if (arr[i].content_child !== '') {
                    let j = 0
                    let div = document.createElement('div')
                    div.innerHTML = `
                                        
                                            ${arr[i].content_child[j].content_child_img} " alt="">
                                            ${arr[i].content_child[j].content_child_info}
                                        
                                        
                                            ${arr[i].content_child[j++].content_child_img} " alt="">
                                            ${arr[i].content_child[j].content_child_info}
                                        
                                        
                                            ${arr[i].content_child[j++].content_child_img} " alt="">
                                            ${arr[i].content_child[j].content_child_info}
                                        
                                        
                                    `
                    div.className = "answer"
                    item_content[i].firstChild.nextSibling.appendChild(div)
                }
            }
        }
        comment(arr)
        //事件冒泡(点赞 回复)
        let items = document.querySelector('.comtent-items')
        items.addEventListener('click', function(event) {
            //点赞
            if (event.target.className === 'thumb') {
                let num = event.target.lastChild.nodeValue //获取点赞数
                let patrn = /[\u4E00-\u9FA5]|[\uFE30-\uFFA0]/gi; //判断是否含有数字
                if (event.target.firstElementChild.className.search('active') != -1) {
                    event.target.firstElementChild.className = 'thumb_icon'
                    if (num == 1) {
                        event.target.lastChild.nodeValue = '点赞'
                    } else {
                        num--
                        event.target.lastChild.nodeValue = num
                    }
                } else {
                    event.target.firstElementChild.className = 'active thumb_icon'
                    if (!patrn.exec(num)) {
                        num++
                        event.target.lastChild.nodeValue = num
                    } else {
                        event.target.lastChild.nodeValue = 1
                    }
                }
            } else if (event.target.className.search("thumb_icon") !== -1) {
                let num = event.target.nextSibling.nodeValue //获取点赞数
                let patrn = /[\u4E00-\u9FA5]|[\uFE30-\uFFA0]/gi; //判断是否含有数字
                if (event.target.className.search('active') != -1) {
                    event.target.className = 'thumb_icon'
                    if (num == 1) {
                        event.target.nextSibling.nodeValue = '点赞'
                    } else {
                        num--
                        event.target.nextSibling.nodeValue = num
                    }
                } else {
                    event.target.className = 'active thumb_icon'
                    if (!patrn.exec(num)) {
                        num++
                        event.target.nextSibling.nodeValue = num
                    } else {
                        event.target.nextSibling.nodeValue = 1
                    }
                }
            }
            //回复
            if (event.target.className === "reply_icon" || event.target.className === "reply") {
                if (event.target.parentNode.parentNode.parentNode.children[1].style.display === "none") {
                    event.target.parentNode.parentNode.parentNode.children[1].style.display = "block"
                } else {
                    event.target.parentNode.parentNode.parentNode.children[1].style.display = "none"
                }
            }
            //回复评论
        })
        //飘窗
        //头部固定
        window.addEventListener('scroll', function() {
            let head = document.querySelector('header')
            if (window.scrollY >= 76) {
                head.style.position = "fixed"
                head.style.opacity = .9
            } else if (window.scrollY <= 20) {
                head.style.position = ""
                head.style.opacity = 1
            }
        })
复制代码基本功能可以实现,也有好多一部分没有完成,主要是想靠这个模块,和这篇文章,来讲讲风波冒泡,这是一个挺重要的点,大家感兴趣可以查看我的风波冒泡的文章ps:写的不好你们作为一个参考或则一个练习笔记看就好~~










