用原生js实现选项卡切换、视频切换和留言/讨论功能

html:(<div class="content"></div>中的代码实际会用数据库的数据)

<div class="classDetail">
			<div class="left">
				<!-- <video src="../video/movie.mp4" controls></video> -->
			</div>
			<div class="right">
				<p class="top">
					<span class="active">目录</span><span>讨论</span>
				</p>
				<div class="content active">
					<!-- <div class="list">
                        <p class="title">第一章:公开课(含4期)</p>
                        <ul class="list">
                            <li class="active">
                                <span>第0节:化学的研究对象和研究方法</span>
                                <i class="iconfont icon-bofang"></i>
                            </li>
                            <li>
                                <span>第1节:化学的研究对象和研究方法</span>
                                <i class="iconfont icon-bofang"></i>
                            </li>
                        </ul>
                    </div> -->
				</div>
				<div class="content">
					<!-- <textarea name="" cols="30" rows="10" maxlength="100" class="txt"></textarea>
					<button class="push">发布</button>
					<div class="scroll">
						<ul class="comment">
							<li>
                                <p>
                                    <img src="../img/login/wx.png" alt="">
                                    <span>哈哈哈哈哈</span>
                                    <span>21:12</span>
                                </p>
                                <p>这是一个无营养的评价</p>
                            </li>
						</ul>
					</div> -->
				</div>
			</div>
		</div>

1.先从模拟数据库videoPlayData.js中引入数据,引入目录和讨论的内容。

videoPlayData.js:

var classList = [{
    title: '第一章:公开课',
    num: 4,
    list: [
        {src: "../video/movie1.mp4", classTime: "33:45", isStudy: true, name: '第0节:化学的研究对象和研究方法', time: '2020.12.10 20:00'},
        {src: "../video/movie2.mp4", classTime: "33:45", isStudy: true, name: '第1节:离子反应', time: '2020.12.10 20:00'},
        {src: "../video/movie3.mp4", classTime: "33:45", isStudy: false, name: '第2节:氧化还原反应', time: '2020.12.10 20:00'},
        {src: "../video/movie4.mp4", classTime: "33:45", isStudy: false, name: '第3节:钠及其化合物', time: '2020.12.10 20:00'}
    ]
},{
    title: '第二章:公开课',
    num: 4,
    list: [
        {src: "../video/movie1.mp4", classTime: "33:45", isStudy: false, name: '第0节:化学的研究对象和研究方法', time: '2020.12.10 20:00'},
        {src: "../video/movie2.mp4", classTime: "33:45", isStudy: false, name: '第1节:离子反应', time: '2020.12.10 20:00'},
        {src: "../video/movie3.mp4", classTime: "33:45", isStudy: false, name: '第2节:氧化还原反应', time: '2020.12.10 20:00'},
        {src: "../video/movie4.mp4", classTime: "33:45", isStudy: false, name: '第3节:钠及其化合物', time: '2020.12.10 20:00'}
    ]
},{
    title: '第三章:公开课',
    num: 4,
    list: [
        {src: "../video/movie1.mp4", classTime: "33:45", isStudy: false, name: '第0节:化学的研究对象和研究方法', time: '2020.12.10 20:00'},
        {src: "../video/movie2.mp4", classTime: "33:45", isStudy: false, name: '第1节:离子反应', time: '2020.12.10 20:00'},
        {src: "../video/movie3.mp4", classTime: "33:45", isStudy: false, name: '第2节:氧化还原反应', time: '2020.12.10 20:00'},
        {src: "../video/movie4.mp4", classTime: "33:45", isStudy: false, name: '第3节:钠及其化合物', time: '2020.12.10 20:00'}
    ]
},{
    title: '第四章:公开课',
    num: 4,
    list: [
        {src: "../video/movie1.mp4", classTime: "33:45", isStudy: false, name: '第0节:化学的研究对象和研究方法', time: '2020.12.10 20:00'},
        {src: "../video/movie2.mp4", classTime: "33:45", isStudy: false, name: '第1节:离子反应', time: '2020.12.10 20:00'},
        {src: "../video/movie3.mp4", classTime: "33:45", isStudy: false, name: '第2节:氧化还原反应', time: '2020.12.10 20:00'},
        {src: "../video/movie4.mp4", classTime: "33:45", isStudy: false, name: '第3节:钠及其化合物', time: '2020.12.10 20:00'}
    ]
},{
    title: '第五章:公开课',
    num: 4,
    list: [
        {src: "../video/movie1.mp4", classTime: "33:45", isStudy: false, name: '第0节:化学的研究对象和研究方法', time: '2020.12.10 20:00'},
        {src: "../video/movie2.mp4", classTime: "33:45", isStudy: false, name: '第1节:离子反应', time: '2020.12.10 20:00'},
        {src: "../video/movie3.mp4", classTime: "33:45", isStudy: false, name: '第2节:氧化还原反应', time: '2020.12.10 20:00'},
        {src: "../video/movie4.mp4", classTime: "33:45", isStudy: false, name: '第3节:钠及其化合物', time: '2020.12.10 20:00'}
    ]
},{
    title: '第六章:公开课',
    num: 4,
    list: [
        {src: "../video/movie1.mp4", classTime: "33:45", isStudy: false, name: '第0节:化学的研究对象和研究方法', time: '2020.12.10 20:00'},
        {src: "../video/movie2.mp4", classTime: "33:45", isStudy: false, name: '第1节:离子反应', time: '2020.12.10 20:00'},
        {src: "../video/movie3.mp4", classTime: "33:45", isStudy: false, name: '第2节:氧化还原反应', time: '2020.12.10 20:00'},
        {src: "../video/movie4.mp4", classTime: "33:45", isStudy: false, name: '第3节:钠及其化合物', time: '2020.12.10 20:00'}
    ]
}];

var classImgList = [
    '../img/videoDetail/detail.png'
];

var commentList = [{
    'name': '哈哈哈哈',
    'time': '21:12',
    'src': '../img/login/user.png',
    'content': '讲的太好了!'
},{
    'name': '哈哈哈哈',
    'time': '21:12',
    'src': '../img/login/user.png',
    'content': '讲的太好了!哈哈哈哈哈哈哈哈哈哈啊哈哈哈哈哈啊哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈'
},{
    'name': '哈哈哈哈',
    'time': '21:12',
    'src': '../img/login/user.png',
    'content': '讲的太好了!'
},{
    'name': '哈哈哈哈',
    'time': '21:12',
    'src': '../img/login/user.png',
    'content': '讲的太好了!'
},{
    'name': '哈哈哈哈',
    'time': '21:12',
    'src': '../img/login/user.png',
    'content': '讲的太好了!'
},{
    'name': '哈哈哈哈',
    'time': '21:12',
    'src': '../img/login/user.png',
    'content': '讲的太好了!'
},{
    'name': '哈哈哈哈',
    'time': '21:12',
    'src': '../img/login/user.png',
    'content': '讲的太好了!'
},{
    'name': '哈哈哈哈',
    'time': '21:12',
    'src': '../img/login/user.png',
    'content': '讲的太好了!'
},{
    'name': '哈哈哈哈',
    'time': '21:12',
    'src': '../img/login/user.png',
    'content': '讲的太好了!'
},{
    'name': '哈哈哈哈',
    'time': '21:12',
    'src': '../img/login/user.png',
    'content': '讲的太好了!'
},{
    'name': '哈哈哈哈',
    'time': '21:12',
    'src': '../img/login/user.png',
    'content': '讲的太好了!'
},{
    'name': '哈哈哈哈',
    'time': '21:12',
    'src': '../img/login/user.png',
    'content': '讲的太好了!'
}];

js:

 //获取元素
    var classDetail = document.querySelector(".classDetail");
    var left = classDetail.querySelector(".left");
    var oSpans = classDetail.querySelectorAll(".top span");
    var oContent = classDetail.querySelectorAll(".content")
    var leftSrc = videoDetail.src;

//video引入
 left.innerHTML = '<video src="' + leftSrc + '" controls></video>';
 
//目录详情
    bindData(classList);

    //数据绑定
    function bindData(data) {
        data.forEach(function (val, index) {
            // console.log(val,index)

            //创建章
            var div = document.createElement("div");
            //设置类名
            div.className = "list";

            div.innerHTML = '<p class="title">' + val.title + '(含' + val.num + '期)</p>';

            //创建ul
            var ul = document.createElement("ul");
            ul.className = "list";

            val.list.forEach(function (listval, listindex) {
                // console.log(listval,listindex)
                //创建li
                var li = document.createElement("li");
                // li.className = `${listval.src}`;
                li.setAttribute('src', `${listval.src}`);
                //赋值
                li.innerHTML = `<span>${listval.name}</span>
                                <i class="iconfont icon-bofang"></i>`;
                //给第一个list中的第一个li加激活样式
                if (index == 0 && listindex == 0) {
                    addClass(li, "active")
                }
                //把li放入ul
                ul.appendChild(li);
                // console.log(ul)
            });
            //将ul放入div中
            div.appendChild(ul);

            //将div添加到rightCon中
            oContent[0].appendChild(div);
        })
    }


 //讨论
    //获取元素
    var talkContent = oContent[1];
    // console.log(talkContent,scroll)
    talkContent.innerHTML = `<textarea name="" cols="30" rows="10" maxlength="100" class="txt"></textarea>
    <button class="push">发布</button>
    <div class="scroll">
        <ul class="comment">
            <li>
                <p>
                    <img src="../img/login/wx.png" alt="">
                    <span>哈哈哈哈哈</span>
                    <span>21:12</span>
                </p>
                <p>这是一个无营养的评价</p>
            </li>
        </ul>
    </div>`;

js:

 //获取元素
    var tabTitle = document.querySelectorAll(".tabTitle span");
    var oTabbox = document.querySelectorAll(".tabBox")
    // console.log(tabTitle,oTabbox)

   //绑定点击事件
   for(var i = 0;i<tabTitle.length;i++){
    //自定义索引
    tabTitle[i].index = i;
    //绑定事件
    tabTitle[i].onclick = function(){
        // console.log(this.index)
        //清空所有激活样式
        for(var i =0;i<tabTitle.length;i++){
            tabTitle[i].className = "";
            oTabbox[i].className = "classlist tabBox";
        };

        //再给对应span和div激活样式
        addClass(this,"active")
        addClass(oTabbox[this.index],"active")
    }
   }
 //获取元素
    var talkDiv = classDetail.querySelector(".scroll");
    // console.log(talkDiv);

    //数据绑定
    talkbindData(commentList);

    function talkbindData(data) {
        //循环遍历数组
        data.forEach(function (val, index) {
            //创建ul
            var ul = document.createElement("ul");
            ul.className = "comment";

            //创建li
            var li = document.createElement("li");
            li.innerHTML = `<p><img src="${val.src}" alt="">
            <span>${val.name}</span>
            <span>${val.time}</span></p>
            <p>${val.content}</p>`;

            //把li添加到ul中
            ul.appendChild(li);

            //把ul添加到talkDiv中
            talkDiv.appendChild(ul);
        })
        //把talkDiv添加到talkContent中
        talkContent.appendChild(talkDiv);
        // console.log( talkContent)
    }

2.实现选项卡切换

 //选项切换
    for (var i = 0; i < oSpans.length; i++) {
        //自定义属性
        oSpans[i].index = i;
        //绑定事件
        oSpans[i].onclick = function () {
            for (var j = 0; j < oSpans.length; j++) {
                oSpans[j].className = "";
                oContent[j].className = "content";
            }
            this.className = "active";
            // console.log(this.index)
            addClass(oContent[this.index], "active");
        }
    }

3.留言/讨论

 //增加讨论
    //获取元素
    var btn = oContent[1].querySelector(".push");
    var textarea = oContent[1].querySelector(".txt")
    var div = oContent[1].querySelector(".scroll")
    // console.log(btn, textarea, div)

    //获取实时时间
    var date = new Date();
    var hour = date.getHours();
    var minutes = date.getMinutes();
    // console.log(hour, minutes)

    //绑定事件
    btn.onclick = function () {
        //创建ul
        var ul = document.createElement("ul");
        ul.className = "comment";

        //创建li
        var li = document.createElement("li");
        li.innerHTML = `<p>
                            <img src="../img/login/wx.png" alt="">
                            <span>哈哈哈哈哈</span>
                            <span>${hour}:${minutes}</span>
                        </p>`;
        //创建p
        var p = document.createElement("p");
        //输入内容不为空
        if (textarea.value) {
            p.innerHTML = textarea.value;
        } else {
            alert("请输入内容");
        }
        //把p添加到li中
        li.appendChild(p);

        //将li添加到ul中
        ul.appendChild(li);

        //将ul添加到div中
        div.insertBefore(ul, div.firstElementChild)
        // console.log(div)
    }

4.根据目录切换视频

//视频切换
    //获取元素
    var listLi = classDetail.querySelectorAll("li");
    // console.log(listLi);
    for (var i = 0; i < listLi.length; i++) {
        //自定义属性
        listLi[i].index = i;
        listLi[i].onclick = function () {
            console.log(this);
            var imgsrc = this.getAttribute("src");
            leftSrc = imgsrc;
            left.innerHTML = '<video src="' + leftSrc + '" controls></video>';
            
            //先清空激活样式
            for(var i =0;i<listLi.length;i++){
                listLi[i].className="";
            }
            //再给对应li激活样式
            this.className = "active";
        }
    }

全部的js代码:(;(function(){代码段})();  是自执行函数,形成私有作用域,防止全局污染)

; (function () {
    //获取元素
    var classDetail = document.querySelector(".classDetail");
    var left = classDetail.querySelector(".left");
    var oSpans = classDetail.querySelectorAll(".top span");
    var oContent = classDetail.querySelectorAll(".content")
    var leftSrc = videoDetail.src

    left.innerHTML = '<video src="' + leftSrc + '" controls></video>';

    //选项切换
    for (var i = 0; i < oSpans.length; i++) {
        //自定义属性
        oSpans[i].index = i;
        //绑定事件
        oSpans[i].onclick = function () {
            for (var j = 0; j < oSpans.length; j++) {
                oSpans[j].className = "";
                oContent[j].className = "content";
            }
            this.className = "active";
            // console.log(this.index)
            addClass(oContent[this.index], "active");
        }
    }

    //目录详情
    bindData(classList);

    //数据绑定
    function bindData(data) {
        data.forEach(function (val, index) {
            // console.log(val,index)

            //创建章
            var div = document.createElement("div");
            //设置类名
            div.className = "list";

            div.innerHTML = '<p class="title">' + val.title + '(含' + val.num + '期)</p>';

            //创建ul
            var ul = document.createElement("ul");
            ul.className = "list";

            val.list.forEach(function (listval, listindex) {
                // console.log(listval,listindex)
                //创建li
                var li = document.createElement("li");
                // li.className = `${listval.src}`;
                li.setAttribute('src', `${listval.src}`);
                //赋值
                li.innerHTML = `<span>${listval.name}</span>
                                <i class="iconfont icon-bofang"></i>`;
                //给第一个list中的第一个li加激活样式
                if (index == 0 && listindex == 0) {
                    addClass(li, "active")
                }
                //把li放入ul
                ul.appendChild(li);
                // console.log(ul)
            });
            //将ul放入div中
            div.appendChild(ul);

            //将div添加到rightCon中
            oContent[0].appendChild(div);
        })
    }

    //视频切换
    //获取元素
    var listLi = classDetail.querySelectorAll("li");
    // console.log(listLi);
    for (var i = 0; i < listLi.length; i++) {
        //自定义属性
        listLi[i].index = i;
        listLi[i].onclick = function () {
            console.log(this);
            var imgsrc = this.getAttribute("src");
            leftSrc = imgsrc;
            left.innerHTML = '<video src="' + leftSrc + '" controls></video>';
            
            //先清空激活样式
            for(var i =0;i<listLi.length;i++){
                listLi[i].className="";
            }
            //再给对应li激活样式
            this.className = "active";
        }
    }


    //讨论
    //获取元素
    var talkContent = oContent[1];
    // console.log(talkContent,scroll)
    talkContent.innerHTML = `<textarea name="" cols="30" rows="10" maxlength="100" class="txt"></textarea>
    <button class="push">发布</button>
    <div class="scroll">
        <ul class="comment">
            <li>
                <p>
                    <img src="../img/login/wx.png" alt="">
                    <span>哈哈哈哈哈</span>
                    <span>21:12</span>
                </p>
                <p>这是一个无营养的评价</p>
            </li>
        </ul>
    </div>`;

    //获取元素
    var talkDiv = classDetail.querySelector(".scroll");
    // console.log(talkDiv);

    //数据绑定
    talkbindData(commentList);

    function talkbindData(data) {
        //循环遍历数组
        data.forEach(function (val, index) {
            //创建ul
            var ul = document.createElement("ul");
            ul.className = "comment";

            //创建li
            var li = document.createElement("li");
            li.innerHTML = `<p><img src="${val.src}" alt="">
            <span>${val.name}</span>
            <span>${val.time}</span></p>
            <p>${val.content}</p>`;

            //把li添加到ul中
            ul.appendChild(li);

            //把ul添加到talkDiv中
            talkDiv.appendChild(ul);
        })
        //把talkDiv添加到talkContent中
        talkContent.appendChild(talkDiv);
        // console.log( talkContent)
    }


    //增加讨论
    //获取元素
    var btn = oContent[1].querySelector(".push");
    var textarea = oContent[1].querySelector(".txt")
    var div = oContent[1].querySelector(".scroll")
    // console.log(btn, textarea, div)

    //获取实时时间
    var date = new Date();
    var hour = date.getHours();
    var minutes = date.getMinutes();
    // console.log(hour, minutes)

    //绑定事件
    btn.onclick = function () {
        //创建ul
        var ul = document.createElement("ul");
        ul.className = "comment";

        //创建li
        var li = document.createElement("li");
        li.innerHTML = `<p>
                            <img src="../img/login/wx.png" alt="">
                            <span>哈哈哈哈哈</span>
                            <span>${hour}:${minutes}</span>
                        </p>`;
        //创建p
        var p = document.createElement("p");
        //输入内容不为空
        if (textarea.value) {
            p.innerHTML = textarea.value;
        } else {
            alert("请输入内容");
        }
        //把p添加到li中
        li.appendChild(p);

        //将li添加到ul中
        ul.appendChild(li);

        //将ul添加到div中
        div.insertBefore(ul, div.firstElementChild)
        // console.log(div)
    }

    //授课师资
    //获取元素
    var introduce = document.querySelector(".introduce");
    // console.log(introduce)
    var teacherleft = introduce.querySelector(".left");
    var teacherright = introduce.querySelector(".right");

    teacherleft.innerHTML = `<p class="img">
                                <img src="${videoDetail.imgSrc}" alt="">
                            </p>
                            <p class="right">
                                <span>${videoDetail.teacher}</span>
                                <span>${videoDetail.teacherTitle}</span>
                            </p>`;
    teacherright.innerHTML = `${videoDetail.introduce}`;
})();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值