chengjie 3 月之前
父节点
当前提交
5622db1b41
共有 1 个文件被更改,包括 112 次插入4 次删除
  1. 112 4
      pages/main/mainlist.js

+ 112 - 4
pages/main/mainlist.js

@@ -1222,10 +1222,9 @@ Page({
1222 1222
       OrderType:od,
1223 1223
     });
1224 1224
   },
1225
-  //设置多选状态
1225
+ //设置多选状态
1226 1226
   setMultipleOptions:function(event){
1227 1227
     var that=this;
1228
-    //debugger;
1229 1228
     var IsMultipleOptions=event.currentTarget.dataset.index==1?true:false;  
1230 1229
     that.setData({
1231 1230
       IsMultipleOptions:IsMultipleOptions,
@@ -1240,6 +1239,8 @@ Page({
1240 1239
         List:list,
1241 1240
         SelectedCount:0,
1242 1241
         CanScroll:true,
1242
+        IsShowSelectUpThis: false,
1243
+        IsShowSelectDownThis: false
1243 1244
       });
1244 1245
     }
1245 1246
     else{
@@ -1256,7 +1257,9 @@ Page({
1256 1257
     var id=event.currentTarget.dataset.id;
1257 1258
     var list=that.data.List;
1258 1259
     var selectedCount=0;
1259
-    //debugger;
1260
+    var firstSelectedIndex = -1;
1261
+    var lastSelectedIndex = -1;
1262
+    
1260 1263
     for(var i=0;i<list.length;i++){
1261 1264
       if (isAll){
1262 1265
         list[i].Selected=true;
@@ -1269,13 +1272,27 @@ Page({
1269 1272
             list[i].Selected=false;          
1270 1273
         }
1271 1274
       }
1272
-      if (list[i].Selected)
1275
+      if (list[i].Selected) {
1273 1276
         selectedCount++;
1277
+        if(firstSelectedIndex === -1) firstSelectedIndex = i;
1278
+        lastSelectedIndex = i;
1279
+      }
1274 1280
     }
1281
+    
1275 1282
     that.setData({
1276 1283
       List:list,
1277 1284
       SelectedCount:selectedCount,
1278 1285
     });
1286
+    
1287
+    // 如果有选中的项目,检查它们的位置并决定显示哪个按钮
1288
+    if(selectedCount > 0) {
1289
+      that.checkSelectedItemsPosition(firstSelectedIndex, lastSelectedIndex);
1290
+    } else {
1291
+      that.setData({
1292
+        IsShowSelectUpThis: false,
1293
+        IsShowSelectDownThis: false
1294
+      });
1295
+    }
1279 1296
   },
1280 1297
   showMultipleOther: function (event) {
1281 1298
     var that = this;
@@ -1554,6 +1571,97 @@ Page({
1554 1571
       path: path,
1555 1572
     });
1556 1573
   },
1574
+  // 检查选中项的位置并决定显示哪个按钮
1575
+  checkSelectedItemsPosition: function(firstIndex, lastIndex) {
1576
+    var that = this;
1577
+    
1578
+    // 使用选择器获取元素位置信息
1579
+    var query = wx.createSelectorQuery();
1580
+    
1581
+    // 获取第一个选中项的位置
1582
+    query.select('#scroll-' + firstIndex).boundingClientRect();
1583
+    
1584
+    // 如果有多个选中项,获取最后一个选中项的位置
1585
+    if(firstIndex !== lastIndex) {
1586
+      query.select('#scroll-' + lastIndex).boundingClientRect();
1587
+    }
1588
+    
1589
+    // 获取屏幕高度
1590
+    query.selectViewport().boundingClientRect();
1591
+    
1592
+    query.exec(function(res) {
1593
+      if(!res || res.length < 2) return;
1594
+      
1595
+      var screenHeight = res[res.length - 1].height;
1596
+      var screenMiddle = screenHeight / 2;
1597
+      
1598
+      var showUp = false;
1599
+      var showDown = false;
1600
+      
1601
+      // 获取第一个选中项的位置
1602
+      var firstItem = res[0];
1603
+      
1604
+      // 如果只有一个选中项
1605
+      if(firstIndex === lastIndex) {
1606
+        if(!firstItem) return;
1607
+        
1608
+        var itemMiddle = firstItem.top + firstItem.height / 2;
1609
+        
1610
+        // 如果项目在屏幕中间偏上
1611
+        if(itemMiddle < screenMiddle) {
1612
+          showUp = true;
1613
+        } 
1614
+        // 如果项目在屏幕中间偏下
1615
+        else {
1616
+          showDown = true;
1617
+        }
1618
+      } else {
1619
+        // 有多个选中项
1620
+        var lastItem = res[1];
1621
+        
1622
+        if(!firstItem || !lastItem) return;
1623
+        
1624
+        var firstItemMiddle = firstItem.top + firstItem.height / 2;
1625
+        var lastItemMiddle = lastItem.top + lastItem.height / 2;
1626
+        
1627
+        // 如果第一个选中项在屏幕中间偏下
1628
+        if(firstItemMiddle > screenMiddle) {
1629
+          showDown = true;
1630
+        }
1631
+        
1632
+        // 如果最后一个选中项在屏幕中间偏上
1633
+        if(lastItemMiddle < screenMiddle) {
1634
+          showUp = true;
1635
+        }
1636
+      }
1637
+      
1638
+      that.setData({
1639
+        IsShowSelectUpThis: showUp,
1640
+        IsShowSelectDownThis: showDown
1641
+      });
1642
+    });
1643
+  },
1644
+  onPageScroll:function(e){
1645
+    let that=this;
1646
+    setTimeout(function() {
1647
+      if(that.data.IsMultipleOptions && that.data.SelectedCount > 0) {
1648
+        var firstSelectedIndex = -1;
1649
+        var lastSelectedIndex = -1;
1650
+        var list = that.data.List;
1651
+        
1652
+        for(var i = 0; i < list.length; i++) {
1653
+          if(list[i].Selected) {
1654
+            if(firstSelectedIndex === -1) firstSelectedIndex = i;
1655
+            lastSelectedIndex = i;
1656
+          }
1657
+        }
1658
+        
1659
+        if(firstSelectedIndex !== -1) {
1660
+          that.checkSelectedItemsPosition(firstSelectedIndex, lastSelectedIndex);
1661
+        }
1662
+      }
1663
+    }, 100);
1664
+  },
1557 1665
   onShareAppMessage: function () {
1558 1666
     return {
1559 1667
       title: app.globalData.ShareTitle,