{"id":1164,"date":"2023-04-01T17:24:00","date_gmt":"2023-04-01T09:24:00","guid":{"rendered":"http:\/\/blog.xrhoujie.com\/?p=1164"},"modified":"2023-03-20T17:30:09","modified_gmt":"2023-03-20T09:30:09","slug":"vue-scrolllist%e5%9e%82%e7%9b%b4%e6%bb%9a%e5%8a%a8%e5%88%97%e8%a1%a8%e7%bb%84%e4%bb%b6%e5%b0%81%e8%a3%85","status":"publish","type":"post","link":"http:\/\/blog.xrhoujie.com\/?p=1164","title":{"rendered":"vue-scrollList\u5782\u76f4\u6eda\u52a8\u5217\u8868\u7ec4\u4ef6\u5c01\u88c5"},"content":{"rendered":"\n<p>\u524d\u6bb5\u65f6\u95f4\u505a\u4e86\u4e00\u4e2aweb\u5c0f\u7a0b\u5e8f\u9879\u76ee\uff0c\u4e1a\u52a1\u4e0a\u6709\u5782\u76f4\u6eda\u52a8\u5217\u8868\u9700\u6c42\uff0c\u6240\u4ee5\u54b1\u5c31\u5f00\u59cb\u52a8\u624b\u62c6\u5206-\u5c01\u88c5\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" width=\"528\" height=\"280\" src=\"http:\/\/blog.xrhoujie.com\/wp-content\/uploads\/2023\/03\/image-5.png\" alt=\"\" class=\"wp-image-1165\" srcset=\"http:\/\/blog.xrhoujie.com\/wp-content\/uploads\/2023\/03\/image-5.png 528w, http:\/\/blog.xrhoujie.com\/wp-content\/uploads\/2023\/03\/image-5-300x159.png 300w\" sizes=\"(max-width: 528px) 100vw, 528px\" \/><\/figure>\n\n\n\n<p>\u7236\u7ec4\u4ef6\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!-- \u62fc\u56e2content -->\n            &lt;div v-if=\"data.activityGroup\">\n                &lt;div class=\"bl-group-bg\">\n                    &lt;p class=\"bl-group-people\">{{data.assest_data.length}}\u4eba\u5728\u62fc\u5355 \u53ef\u76f4\u63a5\u53c2\u4e0e&lt;\/p>\n                    &lt;div class=\"bl-group-wrap\">\n                        &lt;Scroll :id=\"'service'\">\n                            &lt;template>\n                                &lt;div v-for=\"(item,index) in data.assest_data\" :key=\"index\">\n                                    &lt;div class=\"group-left\">\n                                        &lt;image class=\"user-head\" :src=\"item.headImg\">&lt;\/image>\n                                        &lt;p class=\"user-name\">{{item.name}}&lt;\/p>\n                                    &lt;\/div>\n                                    &lt;div class=\"group-right\">\n                                        &lt;div class=\"group-state\">\n                                            &lt;p class=\"order-people\">\u8fd8\u5dee&lt;span class=\"people-num\">{{item.lack}}&lt;\/span>\u4eba\n                                            &lt;\/p>\n                                            &lt;p class=\"order-time\">\n                                                &lt;!-- &lt;span class=\"time-text\">{{ timeout != 0 ? `\u5269\u4f59${timeout}`: `\u672c\u6b21\u6d3b\u52a8\u5df2\u7ed3\u675f`}}&lt;\/span> -->\n                                                &lt;span class=\"time-text\">{{ timeout != 0 &amp;&amp; timeoutList&#91;index] ? `\u5269\u4f59${timeoutList&#91;index]}`: `\u672c\u6b21\u6d3b\u52a8\u5df2\u7ed3\u675f`}}&lt;\/span>\n                                            &lt;!--    &lt;countDown :endTime=\"item.endTime\" :endText=\"item.endText\"\n                                                    class=\"time-text\" :end-tip=\"'scroll'\" \/> -->\n                                            &lt;\/p>\n                                        &lt;\/div>\n                                        &lt;div class=\"go-join-btn\" v-if=\"timeout != 0 &amp;&amp; timeoutList&#91;index]\">\n                                            &lt;p class=\"go-join-text\" @click=\"joinBuying(item,index)\">\u53bb\u62fc\u5355&lt;\/p>\n                                        &lt;\/div>\n                                    &lt;\/div>\n                                &lt;\/div>\n                            &lt;\/template>\n                        &lt;\/Scroll>\n                    &lt;\/div>\n                &lt;\/div>\n            &lt;\/div>\n\n\n&lt;script>\n\nimport Scroll from \"..\/components\/scrollList\/scrollList.vue\"\n\nexport default {\n\t\tcomponents: {\n\t\t\tScroll,\n\t\t},\n\n\ndata: {\r\r\n\r\n\t\t\t\t\tassest_data: &#91;{\r\n\t\t\t\t\t\t\theadImg: '..\/..\/..\/static\/images\/groupBuyingDetail\/bl_share_icon5.png', \/\/\u5934\u50cf\r\n\t\t\t\t\t\t\tname: '\u5fae\u4fe1\u7528\u6237', \/\/\u540d\u5b57\r\n\t\t\t\t\t\t\tlack: 1, \/\/\u7f3a\u5c11\u591a\u5c11\u4eba\u53ef\u4ee5\u62fc\u5355\r\n\t\t\t\t\t\t\tendTime: new Date(\"2023\/03\/27 01:00:00\").getTime() \/ 1000 + ' ',\r\n\t\t\t\t\t\t\tendText: '',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\theadImg: '..\/..\/..\/static\/images\/groupBuyingDetail\/bl_service_icon.png',\r\n\t\t\t\t\t\t\tname: '\u5fae***',\r\n\t\t\t\t\t\t\tlack: 2, \/\/\u7f3a\u5c11\u591a\u5c11\u4eba\r\n\t\t\t\t\t\t\tendTime: new Date(\"2023\/04\/16 12:00:00\").getTime() \/ 1000 + ' ',\r\n\t\t\t\t\t\t\tendText: '',\r\n\t\t\t\t\t\t}, \n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\theadImg: '..\/..\/..\/static\/images\/groupBuyingDetail\/bl_home_icon.png',\r\n\t\t\t\t\t\t\tname: '\u5fae***',\r\n\t\t\t\t\t\t\tlack: 3, \/\/\u7f3a\u5c11\u591a\u5c11\u4eba\r\n\t\t\t\t\t\t\tendTime: new Date(\"2023\/04\/15 06:00:00\").getTime() \/ 1000 + ' ',\r\n\t\t\t\t\t\t\tendText: '',\r\n\t\t\t\t\t\t}, \n\t\t\t\t\t\t\/\/ {\r\n\t\t\t\t\t\t\/\/ \theadImg: '..\/..\/..\/static\/images\/groupBuyingDetail\/bl_share_icon5.png',\r\n\t\t\t\t\t\t\/\/ \tname: '\u5fae***',\r\n\t\t\t\t\t\t\/\/ \tlack: 4, \/\/\u7f3a\u5c11\u591a\u5c11\u4eba\r\n\t\t\t\t\t\t\/\/ \tendTime: new Date(\"2023\/04\/14 09:00:00\").getTime() \/ 1000 + ' ',\r\n\t\t\t\t\t\t\/\/ \tendText: '',\r\n\t\t\t\t\t\t\/\/ }\r\n\t\t\t\t\t],\n}\n\n&lt;\/script><\/code><\/pre>\n\n\n\n<p>\u5b50\u7ec4\u4ef6\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;template>\r\n\t&lt;!-- \u8bbe\u5b9a\u4e00\u4e2a\u5bb9\u5668,\u7ed9\u4e00\u7ec4id\u548c\u9ad8\u5ea6\u5f53\u4f60\u4f7f\u7528\u8fd9\u4e2a\u7ec4\u4ef6\u3002\u5982\u679c\u4f60\u60f3\u6539\u53d8\u6eda\u52a8\u6761\u7684\u6837\u5f0f,\u53ea\u6539\u53d8.scrollContainer\u7684\u98ce\u683c\u5728\u4f60\u7684\u9875\u9762\u3002-->\r\n\t&lt;div class=\"scrollContainer\" :id=\"id\" @mouseenter=\"monseenter\" @mouseleave=\"mouseleave\">\r\n\t\t&lt;slot>&lt;\/slot>\r\n\t&lt;\/div>\r\n&lt;\/template>\r\n\r\n&lt;script>\r\n\texport default {\r\n\t\tname: 'ScrollList',\r\n\t\tprops: {\r\n\t\t\tid: String\r\n\t\t},\r\n\t\tdata() {\r\n\t\t\treturn {\r\n\t\t\t\ttimer: null\r\n\t\t\t};\r\n\t\t},\r\n\t\tmethods: {\r\n\t\t\tinit() {\r\n\t\t\t\tthis.setTimer();\r\n\t\t\t\t\/\/ this.$once\u4ee3\u8868\u53ea\u6267\u884c\u4e00\u6b21\u3002\u5982\u679c\u7ec4\u4ef6\u662f\u5728keep-alive\u4e2d\u5305\u88f9\uff0c\u5219\u9700\u8981\u66f4\u6362\u51fd\u6570\r\n\t\t\t\t\/\/ \u88abkeep-alive\u5305\u88f9\u4f4f\u7684\u7ec4\u4ef6\u6709\u4e24\u4e2a\u751f\u547d\u5468\u671f\u51fd\u6570\uff1aactivated\u548cdeactivated\r\n\t\t\t\tthis.$once('hook:beforeDestroy', () => {\r\n\t\t\t\t\tthis.removeTimer();\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\tremoveTimer() {\r\n\t\t\t\tif (this.timer) {\r\n\t\t\t\t\tclearInterval(this.timer);\r\n\t\t\t\t\tthis.timer = null;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tsetTimer() {\r\n\t\t\t\tthis.removeTimer();\r\n\t\t\t\t\/\/ \u521d\u59cb\u5316\u5bb9\u5668\u5c3a\u5bf8\r\n\t\t\t\tlet scrollHeight = document.getElementById(this.id).scrollHeight;\r\n\t\t\t\tlet clientHeight = document.getElementById(this.id).clientHeight;\r\n\t\t\t\tlet heightDifference = scrollHeight - clientHeight;\r\n\t\t\t\t\/\/ \u5f00\u542f\u6eda\u52a8\t\t\t\t\r\n\t\t\t\tif (heightDifference != 0) {\r\n\t\t\t\t\tthis.timer = setInterval(() => {\r\n\t\t\t\t\t\t\/\/\u50cf\u7d20\u9ad8\u5ea6 : \u5305\u62ec el \u548c \u586b\u5145 \u53ea\u8bfb\r\n\t\t\t\t\t\tlet scrollHeight = document.getElementById(this.id).scrollHeight;\r\n\t\t\t\t\t\t\/\/ \u53ef\u89c1\u533a\u57df\u9ad8\u5ea6:\u5305\u62ecel\u548c\u586b\u5145\u53ea\u8bfb\r\n\t\t\t\t\t\tlet clientHeight = document.getElementById(this.id).clientHeight;\r\n\t\t\t\t\t\tlet heightDifference = scrollHeight - clientHeight;\r\n\t\t\t\t\t\t\/\/ \u6eda\u52a8\u9ad8\u5ea6:\u53ef\u8bfb\u548c\u53ef\u5199\u7684\r\n\t\t\t\t\t\tdocument.getElementById(this.id).scrollTop++;\r\n\t\t\t\t\t\t\/\/ \u5f53\u6eda\u52a8\u5230\u9876\u90e8\r\n\t\t\t\t\t\tif (document.getElementById(this.id).scrollTop >= heightDifference - 1) {\r\n\t\t\t\t\t\t\tthis.removeTimer();\r\n\t\t\t\t\t\t\t\/\/ \u8ba9\u5b83\u56de\u5230\u539f\u59cb\u4f4d\u7f6e\u540e\u4e00\u79d2\r\n\t\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\t\tlet id = document.getElementById(this.id)\r\n\t\t\t\t\t\t\t\tif (id) {\r\n\t\t\t\t\t\t\t\t\tdocument.getElementById(this.id).scrollTop = 0;\r\n\t\t\t\t\t\t\t\t\tthis.setTimer();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}, 1000);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, 44);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tmonseenter() {\r\n\t\t\t\tthis.removeTimer();\r\n\t\t\t},\r\n\t\t\tmouseleave() {\r\n\t\t\t\tthis.setTimer();\r\n\t\t\t}\r\n\t\t},\r\n\t\tmounted() {\r\n\t\t\tthis.init();\r\n\t\t}\r\n\t};\r\n&lt;\/script>\r\n\r\n&lt;style lang=\"scss\" scoped>\r\n\t\/\/ .scrollContainer::-webkit-scrollbar {\r\n\t\/\/     width: 4px;\r\n\t\/\/     background: aliceblue;\r\n\t\/\/ }\r\n\t.scrollContainer::-webkit-scrollbar-thumb {\r\n\t\tbackground: palevioletred;\r\n\t\tborder-radius: 5px;\r\n\t}\r\n\r\n\t.scrollContainer {\r\n\t\theight: 100%;\r\n\t\toverflow: scroll;\r\n\t\toverflow-x: hidden;\r\n\t\toverflow-y: hidden;\r\n\t}\r\n\r\n\t\/\/ \u517c\u5bb9IE\r\n\t\/\/ .scrollContainer {\r\n\t\/\/     \/*\u4e09\u89d2\u7bad\u5934\u7684\u989c\u8272*\/\r\n\t\/\/     scrollbar-arrow-color: #fff;\r\n\t\/\/     \/*\u6eda\u52a8\u6761\u6ed1\u5757\u6309\u94ae\u7684\u989c\u8272*\/\r\n\t\/\/     scrollbar-face-color: #0099dd;\r\n\t\/\/     \/*\u6eda\u52a8\u6761\u6574\u4f53\u989c\u8272*\/\r\n\t\/\/     scrollbar-highlight-color: #0099dd;\r\n\t\/\/     \/*\u6eda\u52a8\u6761\u9634\u5f71*\/\r\n\t\/\/     scrollbar-shadow-color: #0099dd;\r\n\t\/\/     \/*\u6eda\u52a8\u6761\u8f68\u9053\u989c\u8272*\/\r\n\t\/\/     scrollbar-track-color: #0066ff;\r\n\t\/\/     \/*\u6eda\u52a8\u67613d\u4eae\u8272\u9634\u5f71\u8fb9\u6846\u7684\u5916\u89c2\u989c\u8272\u2014\u2014\u5de6\u8fb9\u548c\u4e0a\u8fb9\u7684\u9634\u5f71\u8272*\/\r\n\t\/\/     scrollbar-3dlight-color: #0099dd;\r\n\t\/\/     \/*\u6eda\u52a8\u67613d\u6697\u8272\u9634\u5f71\u8fb9\u6846\u7684\u5916\u89c2\u989c\u8272\u2014\u2014\u53f3\u8fb9\u548c\u4e0b\u8fb9\u7684\u9634\u5f71\u8272*\/\r\n\t\/\/     scrollbar-darkshadow-color: #0099dd;\r\n\t\/\/     \/*\u6eda\u52a8\u6761\u57fa\u51c6\u989c\u8272*\/\r\n\t\/\/     scrollbar-base-color: #0099dd;\r\n\t\/\/ }\r\n&lt;\/style>\n<\/code><\/pre>\n\n\n\n<p>\u7ed3\u675f<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u6bb5\u65f6\u95f4\u505a\u4e86\u4e00\u4e2aweb\u5c0f\u7a0b\u5e8f\u9879\u76ee\uff0c\u4e1a\u52a1\u4e0a\u6709\u5782\u76f4\u6eda\u52a8\u5217\u8868\u9700\u6c42\uff0c\u6240\u4ee5\u54b1\u5c31\u5f00\u59cb\u52a8\u624b\u62c6\u5206-\u5c01\u88c5\u3002 \u7236\u7ec4\u4ef6\uff1a \u5b50\u7ec4\u4ef6\uff1a  [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[41],"tags":[38],"_links":{"self":[{"href":"http:\/\/blog.xrhoujie.com\/index.php?rest_route=\/wp\/v2\/posts\/1164"}],"collection":[{"href":"http:\/\/blog.xrhoujie.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.xrhoujie.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.xrhoujie.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.xrhoujie.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1164"}],"version-history":[{"count":1,"href":"http:\/\/blog.xrhoujie.com\/index.php?rest_route=\/wp\/v2\/posts\/1164\/revisions"}],"predecessor-version":[{"id":1166,"href":"http:\/\/blog.xrhoujie.com\/index.php?rest_route=\/wp\/v2\/posts\/1164\/revisions\/1166"}],"wp:attachment":[{"href":"http:\/\/blog.xrhoujie.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1164"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.xrhoujie.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1164"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.xrhoujie.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1164"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}