美文网首页
JS-WEB-API-Day7

JS-WEB-API-Day7

作者: 小可_34e0 | 来源:发表于2019-08-02 16:16 被阅读0次

图片跟着鼠标飞(终极版)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>title</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        body {
            height: 2000px;
        }

        img {
            position: absolute;
        }
    </style>
</head>
<body>
<img src="./image/22.png" alt="" id="im"/>
<script src="xiec.js"></script>
<script>


    //图片跟着鼠标飞,可以在任何的浏览器中实现
    //window.event和事件参数对象e的兼容
    //clientX和clientY单独的使用的兼容代码
    //scrollLeft和scrollTop的兼容代码
    //pageX,pageY和clientX+scrollLeft 和clientY+scrollTop

    //把代码封装在一个函数

    //把代码放在一个对象中
    var evt = {
        //window.event和事件对象e的兼容
        getEvent: function (evt) {
            return window.event || evt;
        },
        //可视区域的横坐标兼容代码
        getClientX: function (evt) {
            return this.getEvent(evt).clientX;
        },
        //可视区域纵坐标的兼容代码
        getClientY: function (evt) {
            return this.getEvent(evt).clientY;
        },
        //页面向左卷曲出去的横坐标
        getScrollLeft: function () {
            return window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft || 0;
        },
        //页面向上卷曲出去的纵坐标
        getScrollTop: function () {
            return window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop || 0;
        },
        //相对于页面的横坐标(pageX或者是clientX + scrollLeft)
        getPageX: function (evt) {
            return this.getEvent(evt).pageX ? this.getEvent(evt).pageX : this.getClientX(evt) + this.getScrollLeft();
        },
        //相对于页面的纵坐标(pageY或者是clientY + scrollTop)
        getPageY: function (evt) {
            return this.getEvent(evt) ? this.getEvent(evt).pageY : this.getClientY(evt) + this.getScrollTop();
        }
    };
    
    document.onmousemove = function (e) {
        my$("im").style.left = evt.getPageX(e) + "px";
        my$("im").style.top = evt.getPageY(e) + "px";
    };
</script>
</body>
</html>

案例:拖拽对话框
关闭登录框


图片发布于简书APP
//获取超链接,注册点击事件,显示登录框和遮挡框
   my$('link').onclick=function(){
       my$('login').style.display="block";
       my$('bg').style.display="block";
   };
   //获取关闭,注册点击事件,隐藏登录框和遮挡框
   my$('closeBtn').onclick=function(){
       my$('login').style.display="none";
       my$('bg').style.display="none";
   };
   //按下鼠标,移动鼠标,移动登录框
   my$('title').onmousedown=function(e){
       //获取此时的可视区域的横坐标-此时登录框距离左侧页面的横坐标
       var spaceX=e.clientX-my$('login').offsetLeft;
       var spaceY=e.clientY-my$('login').offsetTop;
       //移动事件
       document.onmousemove=function(e){
           //新的可视区域的横坐标-spaceX=====》新的值---》登录框的left属性
           var x=e.clientX-spaceX+250;//250是margin-left的值
           var y=e.clientY-spaceY-140;//140是margin-top的值
           my$('login').style.left=x+'px';
           my$('login').style.top=y+'px';

       }

   };

   document.onmouseup=function(){
       document.onmousemove=null;
   };

案例:放大镜显示(终极版)

 <style>
        * {
            margin: 0;
            padding: 0;
        }
        .box{
            width: 350px;
            height: 350px;
            margin:100px;
            border:1px solid #ccc;
            position: relative;
        }

        .small{

        }
        .big{
            width: 400px;
            height: 400px;
            position: absolute;
            top: 0;
            left: 360px;
            border:1px solid #ccc;
            overflow: hidden;
            display: none;
        }
        .mask{
            width: 175px;
            height: 175px;
            background: rgba(255,255,0,0.4);
            position: absolute;
            top: 0;
            left: 0;
            cursor: move;
            display: none;  
        }
        .small{
            position: relative;
        }
    </style>
</head>
<body>
    <div class="box" id="box">
        <div class="small"><!--小图-->
            <img src="./image/1.jpg" width="350" >
            <div class="mask"></div><!--遮挡层-->
        </div>
        <div class="big"><!--大图-->
            <img src="./image/2.jpg" width="800" >
        </div>
    </div>
</body>
<script src="xiec.js"></script>
<script>
    //获取需要的元素
    var box=my$('box');
    //获取小图的div
    var small=box.children[0];
    //遮挡层
    var mask=small.children[1];
    //获取大图的div
    var big=box.children[1];
    //获取大图
    var bigImg=big.children[0];

    //鼠标进入显示遮挡层和大图的div
    box.onmouseover=function(){
        mask.style.display="block";
        big.style.display="block";
    };
    //鼠标离开隐藏遮挡层和大图的div
    box.onmouseout=function(){
        mask.style.display="none";
        big.style.display="none";
    };

    //鼠标垫移动事件---鼠标在小层上移动
    small.onmousemove=function(e){
         //鼠标此时的可视区域的横坐标和纵坐标
         //主要是设置鼠标在遮挡层中间显示
         var x=e.clientX-mask.offsetWidth/2;
         var y=e.clientY-mask.offsetHeight/2;
         //主要是margin的100px的问题
         x=x-100;
         y=y-100;
         //横坐标的最小值
         x=x<0?0:x;
         //纵坐标的最大值
          y=y<0?0:y;
          //横坐标点最大值
          x=x>small.offsetWidth-mask.offsetWidth?small.offsetWidth-mask.offsetWidth:x;
          //纵坐标的最大值
          y=y>small.offsetHeight-mask.offsetHeight?small.offsetHeight-mask.offsetHeight:y;
          //为遮挡层的left和top赋值
          mask.style.left=x+"px";
          mask.style.top=y+"px";

          //遮挡层的移动距离/大图的移动距离=遮挡层的最大移动距离/大图的最大移动距离
          //大图的移动距离=遮挡层的移动距离*大图的最大移动距离/遮挡层的最大移动距离

          //大图的横向的最大移动距离
          var maxX=bigImg.offsetWidth-big.offsetWidth;
          //大图纵向的最大移动距离
          var maxY=bigImg.offsetHeight-big.offsetHeight;
          //大图的横向移动坐标
          var bigImgMoveX=x*maxX/(small.offsetWidth-mask.offsetWidth);
          //大图纵向移动的坐标
          var bigImgMoveY=y*maxX/(small.offsetWidth-mask.offsetWidth);
          //设置图片移动
          bigImg.style.marginLeft=-bigImgMoveX+"px";
          bigImg.style.marginTop=-bigImgMoveY+"px";


    };

</script>

元素隐藏的不同方式


图片发布于简书APP

大量字符串拼接

<body>
    <input type="button" name="" id="btn" value="xianshi">
    <input type="text" name="">
    <input type="text" name="">
    <input type="text" name="">
    <input type="text" name="">
    <input type="text" name="">
</body>
<script src="xiec.js"></script>
<script>
    //推荐使用数组的方式拼接大量的字符串
    my$('btn').onclick=function(){
        var str=[];
        //获取所有的文本框
        var inputs=document.getElementsByTagName('input');
        //每个文本框的value属性值
        for (var i = 0; i < inputs.length; i++) {
            if(inputs[i].type!="button"){
                str.push(inputs[i].value);
            }
        }
        console.log(str.join("|"));//字符串

    };
</script>
</html>

无刷新评论

<body>
    <table id="tb" border="1">
        <tbody id="tbd">
            <tr>
                <td>猪猪:</td>
                <td>我喜欢吃肉</td>
            </tr>
        </tbody>
    </table>
    </table>
    昵称:<input type="text" name="" id="userName"/><br/>
    <textarea name="" id="tt" cols="30" rows="10"></textarea><br/>
    <input type="button" name="" id="btn" value="评论一下"><br/>
</body>
<script src="xiec.js"></script>
<script>
    //获取按键,注册点击事件
    document.getElementById('btn').onclick=function(){
        //获取昵称元素
        var userName=my$('userName');
        //获取评论的元素
        var tt=my$('tt');

        //创建行
        var tr=document.createElement('tr');
        //行加入到tbody中
        my$('tbd').appendChild(tr);
        //创建列
        var td1=document.createElement('td');
        tr.appendChild(td1);
        td1.innerHTML=userName.value;
        //创建列
        var td2=document.createElement('td');
        tr.appendChild(td2);
        td2.innerHTML=tt.value;
        //清空
        userName.value="";
        tt.value="";

    };
</script>

xiec,js

my$ = function(s) {
     return document.getElementById(s);
}

/*
 * 该函数是返回的是指定格式的日期,是字符串类型
 * 参数:date ----日期
 * 返回值: 字符串类型的日期
 * */
function getDatetoString(date) {
    var strDate;//存储日期的字符串
    //获取年
    var year = date.getFullYear();
    //获取月
    var month = date.getMonth() + 1;
    //获取日
    var day = date.getDate();
    //获取小时
    var hour = date.getHours();
    //获取分钟
    var minute = date.getMinutes();
    //获取秒
    var second = date.getSeconds();
    hour = hour < 10 ? "0" + hour : hour;
    minute = minute < 10 ? "0" + minute : minute;
    second = second < 10 ? "0" + second : second;
    //拼接
    strDate = year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second;//隐藏问题,关于变量声明的位置
    return strDate;
}

//根据id获取元素对象
function my$(id) {
    return document.getElementById(id);
}


/*
 *
 * innerText属性IE中支持
 * textContent火狐中支持
 * dvObj.innerText="您好";设置innerText的值
 * console.log(dvObj.innerText);获取innerText的值
 * 因为上述原因,inerText有时候需要设置值,有时候需要获取值
 * 所以,需要写一个兼容的代码能在火狐中使用,也可以在IE中使用
 *
 *
 * */

/*
 *设置innerText属性的值
 * element-----为某个元素设置属性值
 * content-----设置的值
 * */
function setInnerText(element, content) {
    if (typeof element.textContent === "undefined") {
        //IE浏览器
        element.innerText = content;
    } else {
        element.textContent = content;
    }
}
/*
 * 获取innerText属性的值
 * element 要获取的元素
 * 返回的是该元素的innerText值
 * */
function getInnerText(element) {
    if (typeof element.textContent === "undefined") {
        //IE浏览器
        return element.innerText;
    } else {
        return element.textContent;
    }
}


//获取当前元素前一个元素
function getPreviousElement(element) {
    if (element.previousElementSibling) {
        return element.previousElementSibling;
    } else {
        var ele = element.previousSibling;
        while (ele && ele.nodeType !== 1) {
            ele = ele.previousSibling;
        }
        return ele;
    }
}
//获取当前元素的后一个元素
function getNextElement(element) {
    if (element.nextElementSibling) {
        return element.nextElementSibling;
    } else {
        var ele = element.nextSibling;
        while (ele && ele.nodeType !== 1) {
            ele = ele.nextSibling;
        }
        return ele;
    }
}

//获取父元素中的第一个元素
function getFirstElementByParent(parent) {
    if (parent.firstElementChild) {
        return parent.firstElementChild;
    } else {
        var ele = parent.firstChild;
        while (ele && ele.nodeType !== 1) {
            ele = ele.nextSibling;
        }
        return ele;
    }
}
//获取父元素中的最后一个元素
function getLastElementByParent(parent) {
    if (parent.lastElementChild) {
        return parent.lastElementChild;
    } else {
        var ele = parent.lastChild;
        while (ele && ele.nodeType !== 1) {
            ele = ele.previousSibling;
        }
        return ele;
    }
}

//获取兄弟元素
function getsiblings(ele) {
    if (!ele)return;//判断当前的ele这个元素是否存在
    var elements = [];//定义数组的目的就是存储当前这个元素的所有的兄弟元素
    var el = ele.previousSibling;//当前元素的前一个节点
    while (el) {
        if (el.nodeType === 1) {//元素
            elements.push(el);//加到数组中
        }
        el = el.previousSibling;
    }
    el = ele.nextSibling;
    while (el) {
        if (el.nodeType === 1) {
            elements.push(el);
        }
        el = el.nextSibling;
    }
    return elements;
}
//    //能力检测多个浏览器为同一个对象注册多个事件
var EventTools = {
    //为对象添加注册事件
    addEventListener: function (element, eventName, listener) {
        if (element.addEventListener) {
            element.addEventListener(eventName, listener, false);
        } else if (element.attachEvent) {
            element.attachEvent("on" + eventName, listener)
        } else {
            element["on" + eventName] = listener;
        }
    },
    //为对象移除事件
    removeEventListener: function (element, eventName, listener) {
        if (element.removeEventListener) {
            element.removeEventListener(eventName, listener, false);
        } else if (element.detachEvent) {
            element.detachEvent("on" + eventName, listener);
        } else {
            element["on" + eventName] = null;
        }
    },
    //获取参数e
    getEvent: function (e) {
        return e || window.event;
    },
    getPageX: function (e) {
        if (e.pageX) {
            return e.pageX;
        } else {
            //有的浏览器把高度设计在了文档的第一个元素中了
            //有的浏览器把高度设计在了body中了
            //document.documentElement.scrollTop;//文档的第一个元素
            //document.body.scrollTop;
            var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
            return e.clientX + scrollLeft;
        }
    },
    getPageY: function (e) {
        if (e.pageY) {
            return e.pageY;
        } else {
            var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
            return e.clientY + scrollTop;
        }
    }

};

相关文章

  • JS-WEB-API-Day7

    图片跟着鼠标飞(终极版) 案例:拖拽对话框关闭登录框 案例:放大镜显示(终极版) 元素隐藏的不同方式 大量字符串拼...

网友评论

      本文标题:JS-WEB-API-Day7

      本文链接:https://www.haomeiwen.com/subject/iypxdctx.html