zoukankan      html  css  js  c++  java
  • javascript基础08

    发现今天居然没有要写,那我就写写之前做的笔记吧。

    这是事件的深入:

    拖拽逻辑:

    第一个: onmousedown : 选择元素

    第二个: onmousemove : 移动元素

    第三个:onmouseup : 释放元素

    各浏览器在拖拽上都有问题;就是选中文字,就会产生问题

    原因:当鼠标按下的时候选中文字就可以拖拽文字,这是浏览器的默认行为;

    解决:阻止默认行为 -》在onmousedown时return false;

    ie8以下无效;

    ie8以下 :

    obj.setCapture(); 设置全局捕获,当我们给一个元素设置全局捕获以后,

    那么这个意思就会监听后续触发生的所有事件,当有事件发生时候,就会被当前设置

    了全局捕获的元素所触发

    ie: 有,且效果

    ff:有,但没有效果

    非标准下ie :

    obj.setCapture(); 可以是只执行目标函数,实现到不自动选中文字

    //只执行一次,要不在函数里被调用会出现不断执行的怪事。

    执行当前对象的所有的事件函数的一次,无论事件在哪被执行。

    对应的释放全局捕获

    obj.releaseCapture();

    可以使用其来在ie里阻止默认行为

    碰撞检测

    在web里是没有真正的碰撞的;只是边界的重合检测

    九宫格的思路方式,检测边界重合

    排除不能重合的情况 使用或 ||

    每日一推:

    作业题:

    在做时想到看到一个事情,就是都是运动,那能不能把运动都封装起来了,所以就做了个运动的封装。

    运动代码:

    /*使用调用,obj对象,attr属性,speed速度,想达到的值,回调函数*/
    /*因为运动基本都是px为单位的,至于透明度是没有单位,所以在这里把它分开了,
        其实也没有怎么改,就是判断是不是透明度这个属性,然后走透明度这条线
    */
            function doMove(obj,attr,speed,iTarget,fn){
                if(attr=="opacity"){
                    obj.len=iTarget-parseFloat(getStyle(obj,"opacity"))*100;
                }else{
                    obj.len=iTarget-parseFloat(getStyle(obj,attr));
                }
                /*这里判断方向,在初始点后的为负数,在初始点前为正数*/
                speed=obj.len>0?speed:-speed;
    
                clearInterval(obj.timer);
                obj.timer=setInterval(function(){
                    if(!obj.num){
                        obj.num=0;
                    }
                    if(attr=="opacity"){
                        obj.num=parseFloat(getStyle(obj,attr))*100+speed;
                    }else{
                        obj.num=parseInt(getStyle(obj,attr))+speed;
                    }
                    /*这里是判断到了目标点没有,到了就停止定时器*/
                    if(obj.num>=iTarget && obj.len>0 || obj.num<=iTarget && obj.len<0){
                        obj.num=iTarget;
                        clearInterval(obj.timer);
                        fn && fn();
                    }
                    if(attr=="opacity"){
                        obj.style[attr]=obj.num/100;
                    }else{
                        obj.style[attr]=obj.num+"px";
                    }
                },30);
    
            }
            /*获取css属性值的,会获取表现出现的值*/
            function getStyle(obj,attr){
                return obj.currentStyle?obj.currentStyle[attr]:getComputedStyle(obj)[attr];
            }

    后面题目的运动都是套用这个运动代码的。

    第一题

    代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            #imgBox{
                list-style: none;
                padding: 0;
                margin: 0;
                overflow: hidden;
            }
            #imgBox li{
                position: relative;
                float: left;
                 width: 400px;
                height: 285px;
                margin-left: 10px;
                margin-top: 10px;
                overflow: hidden;
                opacity: 1;
            }
            #imgBox li img {
                width: 400px;
                height: 285px;
            }
            #imgBox li p{
                position: absolute;
                top: 45%;
                left: -125px;
                font-size: 20px;
                width: 120px;
                text-align: center;
                line-height: 40px;
                border:2px solid #ff7600;
                background: rgba(0,0,0,0.6);
                color: #fff;
                font-weight: bold;
                border-radius: 15px;
                z-index: 5;
            }
            #imgBox li .mask,#imgBox li .Bubble{
                position: absolute;
                top: 0;
                left: 0;
                width: 100%;
                height: 100%;
            }
            #imgBox li .Bubble{
                z-index: 10;
            }
            #imgBox li .mask{
                background: #000;
                opacity: 0;
                filter: alpha(opacity:40);
            }
        </style>
        <script type="text/javascript" src="doMove.js"></script>
        <script type="text/javascript">
            
            window.onload=function(){
                var aLi=document.getElementsByTagName("li");
                for(var i=0;i<aLi.length;i++){
                 start(i);
                }
            }
    
            /*写成页面小组件,然后循环套用即可,index就是下标,只要获取li的下标
            传参进出,就可以了
            */
    
            function start(index){
            var aLi=document.getElementsByTagName("li");
            var oMask=aLi[index].querySelector(".mask");
            var oP=aLi[index].querySelector(".text");
            var oBubble=aLi[index].querySelector(".Bubble");
            var w=aLi[index].offsetWidth;
            var w1=w-oP.offsetWidth;
                oBubble.onmouseover=function(){
                        oP.style.display="block";
                        oP.style.left=-oP.offsetWidth+'px';    
                        doMove(oMask,"opacity",4,40);
                        doMove(oP,"left",10,w1);
                }
                oBubble.onmouseout=function(){
                    doMove(oMask,"opacity",4,0);
                    if(parseInt(oP.style.left)<w1){    
                        oP.style.left=-oP.offsetWidth+'px';    
                        oP.style.display="none";
                    }else{
                        doMove(oP,"left",10,w);
                    }
                }
            }    
    
        </script>
    </head>
    <body>
        <ul id="imgBox">
            <li><img src="./img/1.jpg" alt=""><p class="text">dessert</p><div class="mask"></div><div class="Bubble"></div></li>
            <li><img src="./img/2.jpeg" alt=""><p class="text">dessert</p><div class="mask"></div><div class="Bubble"></div></li>
            <li><img src="./img/3.jpg" alt=""><p class="text">dessert</p><div class="mask"></div><div class="Bubble"></div></li>
            <li><img src="./img/4.jpg" alt=""><p class="text">dessert</p><div class="mask"></div><div class="Bubble"></div></li>
            <li><img src="./img/5.jpg" alt=""><p class="text">dessert</p><div class="mask"></div><div class="Bubble"></div></li>
            <li><img src="./img/6.jpeg" alt=""><p class="text">dessert</p><div class="mask"></div><div class="Bubble"></div></li>
        </ul>
    </body>
    </html>

    第二题:

    代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>海贼王</title>
        <!-- 这是基于html5做的,使用了HTML5里的disabled这个属性 -->
        <script type="text/javascript" src="doMove.js"></script>
        <script type="text/javascript">
            window.onload=function(){
                /*获取最外层的盒子,指的是包着这些内容,自己定义的盒子*/
                var oImgBox=document.querySelector(".imgBox");
                /*调用函数*/
                pull(oImgBox);
    
            }
    
            function pull(obj){
                /*默认速度,慢*/
                var speed=1;
                /*获取元素*/
                var oBtn=obj.querySelectorAll(".btnG input[type='button']"),
                    oImg=obj.querySelector("img"),
                    oMask=obj.querySelector(".mask"),
                    aBtn=obj.querySelectorAll(".speed-btnG input[type='button']"),
                    aCount=obj.querySelectorAll(".count span"),
                    /*获取遮罩层初始高度*/
                    dh=oMask.offsetHeight,
                    /*获取图片高度*/
                    h=oImg.offsetHeight;
                    /*设置空变量预备装定时器(每个定时器都有一个id,而定时器返回的值就是这个id)*/
                    obj.timer=null;
                    /*获取图片高度,返回到页面的显示出来*/
                    aCount[1].innerHTML=h;
                    /*开档,快中慢*/
                    for(var i=0;i<aBtn.length;i++){
                        aBtn[i].index=i;
                        aBtn[i].onclick=function(){
                            speed=1;
                            for(var j=0;j<this.index;j++){
                                speed+=5;
                            }
                        }
                    }
                    /*开定时器是为了监听高度的变化,然后把高度返回到页面*/
                    clearInterval(obj.timer);
                    obj.timer=setInterval(function(){
                        obj.h1=parseInt(getStyle(oMask,"height"));
                        if(obj.h){
                                if(obj.h==obj.h1){
                                    aCount[0].innerHTML=obj.h;
                                }else{
                                    obj.h=obj.h1;
                                }
                            }else{
                                obj.h=obj.h1;
                            }    
                        },10);
                    /*点击打开的点击事件*/
                    oBtn[0].onclick=function(){
                        this.disabled=true;
                        oBtn[1].disabled="";
                        doMove(oMask,"height",speed,h);
                    }
                    /*点击关闭的点击事件*/
                    oBtn[1].onclick=function(){
                        this.disabled=true;
                        oBtn[0].disabled="";
                        doMove(oMask,"height",speed,dh);
                    }
            }
        </script>
        <style>
            #container{
                margin: 0 auto;
                border:1px solid #888;
                padding: 10px;
                width: 300px;
            }
            #container .imgBox{
                position: relative;
            }
            #container .count{
                position: absolute;
                top: 0;
                left: 125px;
                margin: 0;
                z-index: 10;
                color: #778899;
            }
            #container img{
                width: 300px;
                height: 500px;
                display: block;
            }
            #container .mask{
                position: absolute;
                bottom: 0;
                left: 0;
                background: #fff;
                width: 100%;
                height: 35px;
            }
            #container .btnG{
                position: absolute;
                top: 20px;
                left: 105px;
            }
            .speed-btnG{
                position: absolute;
                bottom: -45px;
                left: 35%;
            }
        </style>
    </head>
    <body>
        <div id="container">
            <div class="imgBox">
                <p class="count"><span>100</span>/<span>500</span></p>
                <img src="./img/hzw.jpg" alt="">
                <div class="mask">
                    <div class="btnG">
                        <input type="button" value="打开">
                        <input type="button" value="关闭" disabled>
                    </div>
                </div>
                <div class="speed-btnG">
                    <input type="button" value="慢">
                    <input type="button" value="中">
                    <input type="button" value="快">
                </div>
            </div>
        </div>
    </body>
    </html>

    第三题:

    代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>颜色表</title>
        <script type="text/javascript">
            window.onload=function(){
                /*create(第一个参数,第二个参数)
                *第一个参数:表格的宽度
                *第二个参数:颜色的数量(这个数量是(255/参数)向上取整后得到的数字num
                ,然后这个数字三次方得到的值就是颜色数量了)
                不过由于最后一行如果不能形成一行的宽度,就会删除掉这行,所以表现出来的
                颜色数量很可能会少一些
                */
    
                // 调用函数,传入参数,实现一步到位颜色表喔~~
                // 妈妈再也不担心重复操作出错了
                create(40,40);
    
            }
            /*创建表格,和别的元素*/
            function create(len,amount){
                var table=document.createElement("table");
                var p1=document.createElement("p");
                var p2=document.createElement("p");
                var num=0;
                var count=Math.floor(colorBox(amount).length/len);
                table.id="color-table";
                p1.className="color-code";
                p2.className="color-code";
                p1.innerHTML="颜色代码:RGB(0,0,0)";
                p2.innerHTML="颜色代码:#000000";
                for(var i=0;i<count;i++){
                var    tr=document.createElement("tr");
                for(var j=0;j<len;j++){
                    var    td=document.createElement("td");
                        td.index=++num;
                        td.style.background="rgb("+colorBox(amount)[num]+")";
                        td.onclick=function(){
                            document.body.style.background="rgb("+colorBox(amount)[this.index]+")";
                            var arr=colorBox(amount)[this.index].split(",");
                            for(var i=0;i<arr.length;i++){
                                arr[i]=Number(arr[i]).toString(16);
                                if(arr[i].length<2){
                                    arr[i]="0"+arr[i];
                                }
                            }
    
                            p1.innerHTML="颜色代码:RGB("+colorBox(amount)[this.index]+")";
                            p2.innerHTML="颜色代码:#"+arr.join("");
                        }
                        tr.appendChild(td);
                    }
                    table.appendChild(tr);
                }
            document.body.appendChild(table);
            document.body.appendChild(p1);
            document.body.appendChild(p2);
            }
    
            /*颜色代码数据的存储*/
            function colorBox(num){
                var box=[];
                for(var i=0;i<=255;i+=num){
                    for(var j=0;j<=255;j+=num){
                        for(var z=0;z<=255;z+=num){
                            box.push(i+","+j+","+z);
                        }
                    }
                }
                return box;
            }
    
        </script>
        <style>
        h1{
            width: 100px;
            margin: 0 auto;
        }
            #color-table{
                margin: 0 auto;
            }
            td{
                display: inline-block;
                margin: 2px;
                cursor: pointer;
                border:1px solid #000;
                width: 10px;
                height: 10px;
                padding: 5px;
            }
            .color-code{
                width: 330px;
                margin: 20px auto 0;
                font-weight: bold;
                background: #fff;
                height: 30px;
                color: #00BFFF;
                text-align: center;
                font-size: 20px;
                line-height: 30px;
                border-radius: 20px;
            }
        </style>
    </head>
    <body>
        <h1>颜色表</h1>
    </body>
    </html>
  • 相关阅读:
    注意
    被虐的很惨
    在cmd中可以运行java,但是不能用javac
    Linux常用命令
    安装JDK和eclipse
    重装win7
    小希的迷宫
    并查集——The Suspects
    BFS宽度优先搜索
    括号匹配
  • 原文地址:https://www.cnblogs.com/zhangzhicheng/p/5859278.html
Copyright © 2011-2022 走看看