图片跟着鼠标飞(终极版)
<!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;
}
}
};
网友评论