zoukankan      html  css  js  c++  java
  • JavaScript-DOM续

    一.路由的跳转
    <body>
    <a href="#/course">课程</a>
    <a href="#/main">首页</a>
    <div class="show"></div>
    <script>
    //window.inhashchange是一个用来检测路由是否变化的函数
    window.onhashchange=function(){
    //location.hash是获取路由的最后一部分
    switch (location.hash) {
    case '#/course' :
    document.getElementsByClassName('show')[0].innerHTML='我是课程';
    break;
    case '#/main' :
    document.getElementsByClassName('show')[0].innerHTML='我是首页';
    break;
    default:
    break;
    }
    }
    </script>
    </body>
    二.tab栏选项卡
    (1)
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
    *{
    padding: 0;
    margin: 0;
    }
    li{
    float: left;
    }
    ul{
    list-style: none;
    }
    a{
    display: inline-block;
    height: 50px;
    100px;

    line-height: 50px;
    text-align: center;
    text-decoration: none;
    }
    .clearfix:after{
    content: '.';
    clear: both;
    display: block;
    visibility: hidden;
    height: 0;
    }
    p{
    height: 200px;
    300px;
    background-color: red;
    line-height: 200px;
    text-align: center;
    display: none;
    }
    .active{
    display: block;
    }
    </style>
    </head>
    <body>
    <div>
    <ul class="clearfix">
    <li>
    <a href="#">首页</a>
    </li>
    <li>
    <a href="#">新闻</a>
    </li>
    <li>
    <a href="#">图片</a>
    </li>
    <p >首页内容</p>
    <p>新闻内容</p>
    <p>图片内容</p>
    </ul>
    <script>
    oA=document.getElementsByTagName('a');
    //此处的var i=0相当于在最上面的全局变量中var i,此处是i=0
    for(var i=0;i<oA.length;i++){
    oA[i].index = i;//把i找一个地方存储起来
    oA[i].onclick=function (){
    for(var j=0;j<oA.length;j++){
    oP=document.getElementsByTagName('p');
    oP[j].className='';
    oA[j].style.backgroundColor='#a5a6b0';
    }
    oA[this.index].style.backgroundColor='red';
    oP[this.index].className='active';
    }
    }
    </script>
    </div>
    </body>
    //作用域:一个{}代表一个作用域
    //变量提升:见上面代码
    (2)用let解决变量提升问题(用let不会产生变量提升的现象)
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
    *{
    padding: 0;
    margin: 0;
    }
    li{
    float: left;
    }
    ul{
    list-style: none;
    }
    a{
    display: inline-block;
    height: 50px;
    100px;
    background-color: #a5a6b0;
    line-height: 50px;
    text-align: center;
    text-decoration: none;
    }
    .clearfix:after{
    content: '.';
    clear: both;
    display: block;
    visibility: hidden;
    height: 0;
    }
    p{
    height: 200px;
    300px;
    background-color: red;
    line-height: 200px;
    text-align: center;
    display: none;
    }
    .active{
    display: block;
    }
    </style>
    </head>
    <body>
    <div>
    <ul class="clearfix">
    <li>
    <a href="#">首页</a>
    </li>
    <li>
    <a href="#">新闻</a>
    </li>
    <li>
    <a href="#">图片</a>
    </li>
    <p >首页内容</p>
    <p>新闻内容</p>
    <p>图片内容</p>
    </ul>
    <script>
    oA=document.getElementsByTagName('a');
    for(let i=0;i<oA.length;i++){
    oA[i].onclick=function (){
    for(let j=0;j<oA.length;j++){
    oP=document.getElementsByTagName('p');
    oP[j].className='';
    oA[j].style.backgroundColor='#a5a6b0';
    }
    oA[i].style.backgroundColor='red';
    oP[i].className='active';
    }
    }
    </script>
    </div>
    </body>
    二.定时器
    (1)一次性定时器
    可以做异步
    (2)循环周期定时器
    可以做动画
    js的垃圾回收机制不回收定时器对象
    1.开一次性定时器
    var timer=setTimeout(fn,1000);
    清一次性定时器
    clearTimeout(timer)
    实例:
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
    <button class="start">开启定时器</button>
    <button class="end">关闭定时器</button>
    <script>
    var timer;
    document.getElementsByClassName('start')[0].onclick=function(){
    timer=setTimeout(function(){
    alert('111')
    },5000);
    };
    document.getElementsByClassName('end')[0].onclick=function(){
    clearTimeout(timer);
    };
    </script>
    </body>
    2.开循环定时器
    timer=setInterval(fn,1000);
    清循环定时器
    clearInterval(timer)
    实例:
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
    .box{
    height: 100px;
    100px;
    background-color: orangered;
    }
    </style>
    </head>
    <body>
    <button class="start">开启定时器</button>
    <button class="end">关闭定时器</button>
    <div class="box"></div>
    <script>
    var timer;
    var count=0;
    document.getElementsByClassName('start')[0].onclick=function(){
    clearInterval(timer);
    timer=setInterval(function () {
    count+=10;
    oBox=document.getElementsByClassName('box')[0];
    oBox.style.marginLeft=count+'px';
    },500)
    };
    document.getElementsByClassName('end')[0].onclick=function(){
    clearTimeout(timer);
    };
    </script>
    </body>
    三.JavaScript中的面向对象
    1.使用Object或字面量方式创建对象
    (1)使用Object内置的构造函数来创建对象
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
    <script>
    //创建student对象
    var student=new Object();
    //添加属性
    student.name='沈珍珠';
    student.age='18';
    //添加方法
    student.work=function(){
    alert('战斗')
    };
    student.work();
    </script>
    </body>
    (2)字面量方式创建
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
    <script>
    //创建一个student对象
    var student={
    //添加属性
    name:'广平王',
    //用逗号隔开
    age:'19',
    //添加方法
    work:function(){
    alert('皇位');
    }
    };
    </script>
    </body>
    2.工厂模式创建对象
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
    <script>
    function factory(){
    var student=new Object();
    student.name='魏璎珞';
    student.work=function(){
    alert('战斗');
    };
    return student;
    }
    var s1=factory();
    s1.work();
    var s2=factory();
    </script>
    </body>
    3.自定义的构造函数模式创建对象
    <body>
    <script>
    //为了与正常的函数区分,此处的函数名首字母要大写
    function Person(name,age){
    //此处的this相当于面向对象中的self
    this.name=name;
    this.age=age;
    this.fav=function(){
    alert(this.name);
    }
    }

    function Fruit(name,age){
    this.name=name;
    this.age=age;
    this.fav=function(){
    alert(this.name);
    }
    }
    //实例化时需要加一个new关键字
    var f1=new Fruit('apple','18');
    var p1=new Person('lili','18');

    //instance用来检测前者是否是后者的实例,所有对象都是Object的实例
    console.log(p1 instanceof Person);
    console.log(f1 instanceof Fruit);
    </script>
    </body>
    4.原型的模式创建对象
    <body>
    <script>
    function Person(name,age){
    this.name=name;
    this.age=age;
    }
    //Person.prototype是Person的父类
    //每一个实例化对象都继承prototype
    Person.prototype.showName=function(){
    //谁调用prototype,这里的this就是谁
    console.log(this.name);
    };
    var p1=new Person('mimi',18);
    p1.showName();
    var p2=new Person('丽丽',19);
    p2.showName()
    </script>
    </body>
























  • 相关阅读:
    iOS:解决打包可能会出现环境错误问题
    iOS:关于self.perfrom(:_, with: afterDelay: )不执行问题
    docker容器中安装vi命令
    java-1 基础一
    java-0 重拾java
    柯里化函数的实现
    flex布局最后一行列表左对齐的N种方法
    【第一弹】微服务认证与授权企业级理解
    MySQL性能优化(慢查询日志、Explain执行计划、show profile、MySQL服务优化)
    MySQL锁详解
  • 原文地址:https://www.cnblogs.com/shanghongyun/p/9714044.html
Copyright © 2011-2022 走看看