demo03瀑布流布局

demo03瀑布流布局

需求

  1. 鼠标不在图片上方时,进行自动轮播,并且左右箭头不会显示;当>鼠标放在图片上方时,停止轮播,并且左右箭头会显示;
  2. 图片切换之后,图片中下方的小圆点会同时进行切换,并且点击相>应的小圆点可以切换到相应的图片上;
  3. 点击左右箭头可以进行左右图片的切换;
  4. 图片上需有介绍的文字,会随图片切换一起进行切换。

思路

设置六个 div标签,并将其中一个div import添加新效果
能够在鼠标下拉时加载其余的图片
调用生成器函数,进行加载
由页面加载判断完全加载完成时,结束定时

代码

<!DOCTYPE html>
<html lang="zh-CN" xml:lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>这是网页标题</title>
    <meta name="description" content="内容描述" />
    <meta name="keywords" content="关键字" />
    <meta name="robots"content="none"> 
    <meta name="author"content="jinhao"> 
    <meta name="generator"content="vsCode"/> 
    <link rel="stylesheet" href="">
    <link rel="icon" href="favicon.ico" type="image/x-icon">
    <link rel="shortcut icon " href="favicon.ico" type="image/x-icon">
    <link rel="stylesheet" href="./demo01.css">
<style>
        body,html{
            height: 100%;
        }
        .container{
            width: 100%;
            display: flex;
            justify-content: space-between;
        }
        .yan{
            height: fit-content;
            flex: 1;
            display: flex;
            flex-direction: column;
            margin: 10px;
        }
        .yan :nth-child(odd){
            margin: 10px;
        }
        .yan :nth-child(even){
            margin: 10px;
        }
        .yan img{
            width: 100%;
        }
    </style>
</head>
<body>
    <div class="container" id="container">
        <div class="yan yan1"></div>
        <div class="yan yan2"></div>
        <div class="yan yan3"></div>
        <div class="yan yan4"></div>
        <div class="yan yan5"></div>
        <div class="yan yan6"></div>
    </div>
    <script>
        const data =[
        {url:'1.jpg'},{url:'1.jpg'},
        {url:'2.jpg'},{url:'2.jpg'},
        {url:'3.jpg'},{url:'3.jpg'},
        {url:'4.jpg'},{url:'4.jpg'},
        {url:'5.jpg'},{url:'5.jpg'},
        {url:'6.jpg'},{url:'6.jpg'},
        {url:'7.jpg'},{url:'7.jpg'},
        {url:'8.jpg'},{url:'8.jpg'},
        {url:'9.jpg'},{url:'9.jpg'},
        {url:'10.jpg'},{url:'10.jpg'},
        {url:'11.jpg'},{url:'11.jpg'},
        {url:'12'},{url:'12.jpg'},
        {url:'13.jpg'},{url:'13.jpg'},
        {url:'14.jpg'},{url:'14.jpg'},
        {url:'15.jpg'},{url:'15.jpg'},
        {url:'16.jpg'},{url:'16.jpg'},
        {url:'17.jpg'},{url:'17.jpg'},
        {url:'18.jpg'},{url:'18.jpg'},
        {url:'19.jpg'},{url:'19.jpg'},
        {url:'20.jpg'},{url:'20.jpg'}
        ]
        //声明并存入图片进数组中
        const yan = [...document.querySelectorAll('.yan')] //声明每一列并将每列的数组在语法层展开
        const container = document.querySelector('.container')
        const yan1 = document.querySelector('.yan1')
        const yan2 = document.querySelector('.yan2')
        const yan3 = document.querySelector('.yan3')
        const yan4 = document.querySelector('.yan4')
        const yan5 = document.querySelector('.yan5')
        const yan6 = document.querySelector('.yan6')
        //设置内部图像盒子高度函数并返回其值
        function autoHeight(){
            return[yan1.clientHeight,yan2.clientHeight,yan3.clientHeight,
                   yan4.clientHeight,yan5.clientHeight,yan6.clientHeight]
        }
        function showItem(){
            let arrHeight = autoHeight() //获取图像盒子高度
            let index = arrHeight.indexOf(Math.min(...arrHeight)) //返回所有盒子高度最小值赋值给index
            return index
            let heightArr = []
        heightArr[index] += data[i].offsetHeight
        }
        
        function* upload(){ //调用生成器函数,实现加载功能
            for(let i = 0; i < data.length;i++){
                let minItem = showItem() //获取最小盒子高度
                let img = document.createElement('img') //创建图片
                img.src = data[i].url //调取图片
                yan[minItem].appendChild(img) //在最小高度盒子优先添加新的图片节点
                yield minItem //迭代器返回最小高度盒子
            }
        }
        let initial = 0 
        window.onload = function(){ //设置窗口加载后执行函数
            let alter = upload() //声明迭代函数
            let interval = setInterval(()=>{ 
                if(initial>data.length){
                    clearInterval(interval) //判断此时是否大于所给数据长度,若是则清除加载的0.1秒定时,否则继续
                    return
                }
                initial++
                alter.next()
            },100)
        }    
    </script>

</html>
以下是一个简单的微信小程序瀑布流布局的示例代码: ```html <!-- index.wxml --> <view class="waterfall"> <view wx:for="{{columns}}" wx:key="index" class="column"> <view wx:for="{{column}}" wx:key="index" class="item"> <image src="{{item.image}}" mode="aspectFit" class="item-image"></image> <text class="item-title">{{item.title}}</text> </view> </view> </view> ``` ```css /* index.wxss */ .waterfall { display: flex; } .column { flex: 1; } .item { margin-bottom: 10px; padding: 10px; background-color: #f0f0f0; } .item-image { width: 100%; height: 200px; } .item-title { margin-top: 5px; font-size: 14px; } ``` ```javascript // index.js const data = [ { image: 'https://example.com/image1.jpg', title: 'Item 1' }, { image: 'https://example.com/image2.jpg', title: 'Item 2' }, { image: 'https://example.com/image3.jpg', title: 'Item 3' }, // 更多数据项... ]; Page({ data: { columns: [], }, onLoad: function() { const columns = [[], [], []]; data.forEach((item, index) => { const columnIndex = index % 3; columns[columnIndex].push(item); }); this.setData({ columns, }); }, }); ``` 在这个示例中,我们使用了 Flex 布局来创建瀑布流效果。在 `index.wxml` 中,我们使用了 `wx:for` 循环来遍历每一列和每个项目,并使用 `image` 和 `text` 组件来显示图片和标题。在 `index.wxss` 中,我们设置了每个项目的样式,包括图片的宽度和高度、标题的样式等。 在 `index.js` 中,我们将数据分成了三列,并通过 `setData` 方法将数据传递给视图层。 您可以根据实际需求修改数据和样式。希望对您有所帮助!如果您有任何问题,请随时向我提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值