相册图片切换

事件委托是通过事件冒泡的原理,利用父级去触发子级的事件。 如下html,如果不用事件委托,将每一个li都去添加click事件监听,非常麻烦。 另外就是如果通过js动态创建的子节点,需要重新绑定事件。 而利用事件委托的话,只需要给父级绑定一个事件监听,即可让每个li都绑定上相应的事件。

<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><title>相册图片切换</title><styletype="text/css">*{margin:0;padding: 0;} .container{margin:20px auto; width:600px;} .container ul li{list-style:none; width:192px;height:200px;border:3px solid transparent;float: left;overflow: hidden;}.container ul li:hover{border:3px solid #1db791;} .container ul li:hover img{border:3px solid #1db791;transform:scale(1.2);} .container ul li img{width: 100%;height: 100%;transition: transform 3s;} .box{width: 100%;height: 100%;background:rgba(0,0,0,0.5);position: fixed;top:0;left: 0;display: none;}.pic{width:400px;height: 400px;padding:20px; background-color: #fff; position: fixed;overflow: hidden;left:50%;margin-left:-200px; top:50%;margin-top:-200px; display: none;}/*top:calc(50%-100);left:calc(50%-96);*/.pic img{width: 100%;height: 100%;} .arrow{width: 30px;height: 60px;background-color:#8d8a8a; display: block;position: absolute;top:50%;margin-top:-30px; z-index:11111111;line-height: 60px;text-align: center;font-size: 30px; color:#efefef;}a.arrow{text-decoration: none;} .arr-left{left:0px;}.arr-right{right:0px;}</style></head><body><divclass="container"id="container"><ulid="ul1"><li><imgsrc="quickOnline/img/1.jpg"alt=""></li><li><imgsrc="quickOnline/img/2.jpg"alt=""></li><li><imgsrc="quickOnline/img/3.jpg"alt=""></li><li><imgsrc="quickOnline/img/4.jpg"alt=""></li></ul></div><!-- 阴影层 --> <divclass="box"id='box'></div><divclass="pic"id="pic"><imgsrc=""alt=""><ahref="#"class="arrow arr-left"id="left"><</a><ahref="#"class="arrow arr-right"id="right">></a></div><scripttype="text/javascript">var lis=document.getElementsByTagName('li'); // var box=document.getElementsByClassName('box')[0]; var box=$('box'); // var pic=document.getElementsByClassName('pic')[0]; var pic=$('pic'); var index=0; //这里使用了事件委托 window.onload = function(){   var oUl = document.getElementById("ul1");   oUl.onclick = function(ev){     var ev = ev || window.event;     var target = ev.target || ev.srcElement; while(target !== oUl ){ if(target.tagName.toLowerCase() == 'li'){ console.log('li click~'); break; } target = target.parentNode; } var node = target.parentNode.children;     if(target.nodeName.toLowerCase() == 'li'){**var nodeArr = Array.from(node);**//类数组转换成数组 index = nodeArr.indexOf(target);       console.log(index); box.style.display='block'; pic.style.display='block';getSrc();    }   } } box.οnclick=function(){ box.style.display='none'; pic.style.display='none'; } function $(id){return document.getElementById(id);}$('right').οnclick=function(){index++; if (index>lis.length-1) { index=0; //alert('已经是最后一张了!') //return; } console.log(lis.length); //可优化 两种方法取一// index%=lis.length;getSrc(); } $('left').οnclick=function(){ index--; if (index<0) { index=lis.length-1;; //alert('已经是第一张了!') } //可优化 //if(index<0)index=0; getSrc(); }function getSrc(){var img=lis[index].children[0].src;pic.children[0].src=img;} </script> </body></html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 layui 的 layer 组件和轮播图组件实现弹窗相册切换,具体步骤如下: 1. 引入 layui 的 layer 和轮播图组件: ```html <link rel="stylesheet" href="path/to/layui/css/layui.css"> <script src="path/to/layui/layui.js"></script> ``` 2. 创建相册图片列表和弹窗结构: ```html <div id="album"> <img src="path/to/image1.jpg"> <img src="path/to/image2.jpg"> <img src="path/to/image3.jpg"> </div> <div id="popup" style="display: none;"> <div class="layui-carousel" id="popup-carousel"> <div carousel-item=""> <div><img src="path/to/image1.jpg"></div> <div><img src="path/to/image2.jpg"></div> <div><img src="path/to/image3.jpg"></div> </div> </div> </div> ``` 3. 绑定点击事件显示弹窗: ```javascript // 获取相册元素 var album = document.getElementById('album'); // 绑定点击事件 album.addEventListener('click', function(e) { // 阻止默认行为 e.preventDefault(); // 获取当前点击的图片元素和索引 var current = e.target; var index = Array.prototype.indexOf.call(album.children, current); // 弹出层显示 layer.open({ type: 1, title: false, closeBtn: 1, area: ['80%', '80%'], skin: 'layui-layer-nobg', shadeClose: true, content: document.getElementById('popup'), success: function() { // 轮播图组件初始化 layui.use('carousel', function() { var carousel = layui.carousel; carousel.render({ elem: '#popup-carousel', width: '100%', height: '100%', arrow: 'always', indicator: 'none', anim: 'fade', index: index }); }); } }); }); ``` 这样就可以实现弹窗相册切换的效果了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值