javascript基础08

Posted 小数点就是问题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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].o

以上是关于javascript基础08的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段12——JavaScript的Promise对象

VSCode自定义代码片段12——JavaScript的Promise对象

30秒就能看懂的JavaScript 代码片段

Yarn: 一个新的JavaScript模块管理器

常用Javascript代码片段集锦

48个值得掌握的JavaScript代码片段(上)