仿京东产品放大镜效果---js基础

仿京东产品放大镜效果的分析思路

####主要练习元素偏移量 offset的系列
展示功能:

  1. 鼠标经过图片盒子( **命名:preview-img **),鼠标箭头下会出现一个小透明的盒子(命名:mask),和 一个显示大图盒子(命名:box)
  2. mask作为放大镜功能使用, 会跟随鼠标在preview-img内部移动;
  3. 鼠标在**preview-img 内部移动时,box 里的图片也会随着鼠标在preview-img **内部的移动而移动;
  4. 当鼠标称出preview-imgmaskbox 也都消失不见;
要实现上述功能,拆解步骤
  1. 写html框架
 <div class="preview-img">
        <img src="images/banner1.jpg" alt="" class="min-img">
        <div class="mask"></div>
        <div class="box">
            <img src="images/banner1.jpg" alt="" class="boxImg">
        </div>
    </div>
  1. 定义样式
.preview-img{position:relative;width:400px;height:400px;text-align:center;border:solid 1px #ccc;}.min-img{width:400px;height:400px;}.mask{display:none;position:absolute;top:0;left:0;width:300px;height:300px;background-color:rgba(0,0,0,.3);}.box{display:none;position:absolute;top:0;right:-510px;width:500px;height:500px;z-index:999;overflow:hidden;}.box img{position:absolute;top:0;left:0;width:800px;height:800px;}
  1. js代码
//获取元素
var preview = document.querySelector('.preview-img');
var mask = document.querySelector('.mask');
var box = document.querySelector('.box');


//鼠标经过大盒子,mask 、box  显示
function over() {
    mask.style.display = 'block';
    box.style.display = 'block';
};
preview.addEventListener('mouseover', over);


//鼠标离开大盒子,mask 、box 隐藏
function out() {
    mask.style.display = 'none';
    box.style.display = 'none';
};
preview.addEventListener('mouseout', out);

//获取鼠标在盒子里移动的实时坐标 赋值给mask层
//
function move(e) {
    var x = e.pageX - preview.offsetLeft;
    var y = e.pageY - preview.offsetTop;
    var maskX = x - mask.offsetWidth / 2;
    var masky = y - mask.offsetHeight / 2;
    //如果  maskX 小于等0   就让它等于0  不让masky 超出preview 的左右边界
    var maskMax = preview.offsetWidth - mask.offsetWidth;
    if (maskX <= 0) {
        maskX = 0
    } else if (maskX >= maskMax) {
        maskX = maskMax
    }
    
	//如果  masky 小于等0   就让它等于0,不让masky超出preview 的上下边界
    if (masky <= 0) {
        masky = 0
    } else if (masky >= preview.offsetHeight - mask.offsetHeight) {
        masky = preview.offsetHeight - mask.offsetHeight
    }
    
	//offset系列只能读取数值且没单位的,style可以修改数字 
    mask.style.left = maskX + 'px';
    mask.style.top = masky + 'px';

   //获取最大图片的元素
    var boxImg = document.querySelector('.boxImg');
    //大图片的移动距离 
    var bigMax = boxImg.offsetWidth - box.offsetWidth;
    
   //大图的移动距离=mask移动距离*大图的最大移动距离 /遮挡层的最大移动距离 
   //大图片的移动距离 X Y
    var bigX = maskX * bigMax / maskMax;
    console.log(maskX);
    var bigY = masky * bigMax / maskMax;
    
   //style赋值给大图x上距和基左距的距离 
    boxImg.style.left = -bigX + 'px';
    boxImg.style.top = bigY + 'px';
}
preview.addEventListener('mousemove', move);

ps:对我来说最难的点在于理解这个计算出大图移动距离 的公式
==大图的移动距离=mask移动距离*大图的最大移动距离 /遮挡层的最大移动距离 ==

要在Android中读取自定义的XML文件,可以使用以下步骤: 1. 在res目录下创建一个新的XML文件夹(如果不存在),并将自定义XML文件放在其中。例如,可以在res目录下创建一个名为xml的文件夹,并将自定义XML文件命名为address.xml。 2. 在代码中使用以下代码读取自定义XML文件: ```java // 获取XML文件的资源ID int xmlResourceId = getResources().getIdentifier("address", "xml", getPackageName()); // 打开XML文件流 InputStream inputStream = getResources().openRawResource(xmlResourceId); // 创建XML解析器 XmlPullParser xmlPullParser = Xml.newPullParser(); // 设置XML解析器的输入流和字符编码 xmlPullParser.setInput(inputStream, "UTF-8"); // 解析XML文件 int eventType = xmlPullParser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.START_TAG: // 处理XML标签 break; case XmlPullParser.END_TAG: // 处理XML标签结束 break; default: break; } eventType = xmlPullParser.next(); } ``` 3. 在解析XML文件时,可以使用XmlPullParser类来处理XML标签和属性。在处理XML标签时,可以使用以下代码获取标签名称和属性值: ```java // 获取标签名称 String tagName = xmlPullParser.getName(); // 获取属性数量 int attributeCount = xmlPullParser.getAttributeCount(); // 获取属性值 String attributeValue = xmlPullParser.getAttributeValue(null, "attributeName"); ``` 4. 通过解析XML文件,可以获取所需的数据,并将其用于您的应用程序逻辑。 希望这可以帮助您读取自定义XML文件!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值