js分組, 实际应用

傷城~ 2023-06-23 08:58 22阅读 0赞

多人参加游戏, 需要随机分组, 使用程序更加便捷

效果图:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3ODAyMjk4_size_16_color_FFFFFF_t_70

引用到的文件: 各文件都可以很方便的下载到.

  1. ** js: ** vue.js // mui.js // jquery.js // mui.picker.js // mui.poppicker.js
  2. **css: **mui.css // mui.picker.css // mui.poppicker.css // animate.css
  3. **img: ![20191218120446697.png][]** add\_user.png
  4. <!doctype html>
  5. <html>
  6. <head>
  7. <meta charset="utf-8">
  8. <title>開始遊戲吧!</title>
  9. <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
  10. <link href="css/mui.css" rel="stylesheet" />
  11. <link rel="stylesheet" type="text/css" href="css/mui.picker.css" />
  12. <link rel="stylesheet" type="text/css" href="css/mui.poppicker.css" />
  13. <link rel="stylesheet" type="text/css" href="css/animate.css" />
  14. </head>
  15. <style>
  16. html,body,#app_vue{
  17. height: 100%;
  18. background-color: #FFF;
  19. }
  20. .mui-bar-nav{
  21. background-color: #8A6DE9;
  22. color: #FFF;
  23. }
  24. .mui-title{
  25. color: #FFF !important;
  26. }
  27. .mui-pull-right{
  28. color: #CF2D28;
  29. }
  30. .mui-content{
  31. background-color: #FFF;
  32. padding: 0 10px;
  33. height: 100%;
  34. overflow-x: hidden;
  35. overflow-y: auto;
  36. }
  37. .all-name{
  38. display: flex;
  39. flex-direction: row;
  40. flex-wrap: wrap;
  41. }
  42. .all-name div{
  43. padding: 3px 10px;
  44. border: 1px solid #AAAAAA;
  45. margin: 5px;
  46. border-radius: 5px;
  47. color: #555555;
  48. display: flex;
  49. align-items: center;
  50. }
  51. .how-people{
  52. text-align: right;
  53. font-size: 14px;
  54. color: #555555;
  55. padding: 5px;
  56. display: flex;
  57. justify-content: space-between;
  58. }
  59. .group{
  60. padding: 6px 0;
  61. }
  62. .group-name{
  63. font-size: 16px;
  64. padding: 3px 0;
  65. }
  66. .group-item-box{
  67. display: flex;
  68. flex-wrap: wrap;
  69. }
  70. .group-item{
  71. font-size: 14px;
  72. color: #333333;
  73. padding: 3px 6px;
  74. margin: 3px;
  75. border: 1px solid #C8C7CC;
  76. border-radius: 5px;
  77. }
  78. .add_user{
  79. width: 20px;
  80. height: 20px;
  81. }
  82. </style>
  83. <body>
  84. <div id="app_vue">
  85. <header class="mui-bar mui-bar-nav">
  86. <h1 class="mui-title">{
  87. {window_.title}}</h1>
  88. <a class="mui-icon mui-pull-right" v-on:click="selectNum">{
  89. {selectNum_}}</a>
  90. </header>
  91. <div class="mui-content">
  92. <div class="all-name">
  93. <div v-bind:class="updata_.show_animate ? 'swing animated infinite' : '' " v-for="(item,index) in lists"
  94. v-bind:data-index="index" v-on:click="updata_item">
  95. {
  96. {item.name}}
  97. </div>
  98. <div v-if="!updata_.show_animate" v-on:click="addUser">
  99. <img class="add_user" src="image/add_user.png" />
  100. </div>
  101. </div>
  102. <div class="how-people">
  103. <div v-on:click="updata">{
  104. {updata_.show_animate ? '編輯完畢' : '點我編輯' }}</div>
  105. <div>共{
  106. {lists.length}}人</div>
  107. </div>
  108. <button type="button" class="mui-btn group mui-btn-purple mui-btn-block" v-on:click="isgo">開始隨機分組</button>
  109. <div>
  110. <div v-for="(item,index) in changeLists">
  111. <div class="group-name">第{
  112. {index + 1}}組,共{
  113. {item.length}}人</div>
  114. <div class="group-item-box">
  115. <div class="group-item" v-for="(item_,index_) in item">
  116. {
  117. {item_.name}}
  118. </div>
  119. </div>
  120. </div>
  121. </div>
  122. </div>
  123. </div>
  124. <script src="js/jquery-2.1.1.js" type="text/javascript" charset="utf-8"></script>
  125. <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
  126. <script src="js/mui.js"></script>
  127. <script src="js/mui.picker.js" type="text/javascript" charset="utf-8"></script>
  128. <script src="js/mui.poppicker.js" type="text/javascript" charset="utf-8"></script>
  129. <script type="text/javascript">
  130. mui.init()
  131. var vm = new Vue({
  132. el: '#app_vue',
  133. data: {
  134. window_: {
  135. title: "喲,開始你的錶演吧"
  136. },
  137. // 主數據集
  138. lists: [{
  139. name: '111'
  140. }, {
  141. name: '222'
  142. }, {
  143. name: '333'
  144. }, {
  145. name: '444'
  146. }, {
  147. name: '555'
  148. }, {
  149. name: '666'
  150. }, {
  151. name: '777'
  152. }, {
  153. name: '888'
  154. }, {
  155. name: '999'
  156. }, {
  157. name: '100'
  158. }],
  159. // 分組數據集
  160. changeLists: [],
  161. selectNum_: 1, // 選擇的 組人數
  162. updata_: {
  163. show_animate: false, //是否顯示動畫
  164. }
  165. },
  166. created() {
  167. //初始化加載方法
  168. },
  169. methods: {
  170. /**
  171. * 開始分組
  172. * @param {Object} list 數據集
  173. * @param {Object} num 組數
  174. */
  175. isChange: function(list, num) {
  176. var self = this;
  177. var n = list.length - 1; //获取数组下标的上限
  178. var len_ = list.length / num;
  179. var length = parseInt(n / num); //获取分组后单组的长度
  180. var list1 = JSON.parse(JSON.stringify(list)), // 轉存, 不去影響 主數據
  181. list2 = [];
  182. var f = length * num;
  183. for (var i = 0; i < num; i++) { //根据分组数,确定遍历次数
  184. var newlist = [];
  185. // 處理 余數 問題.
  186. var dd = length;
  187. if (dd < len_ && f < n + 1) {
  188. dd += 1;
  189. f++;
  190. }
  191. for (var j = 0; j < dd; j++) {
  192. var id = Math.ceil(Math.random(0, list1.length - 1) * list1.length - 1); //获取下标范围内的随机数
  193. newlist.push(list1[id]); //将获取的对象放入定义的变量数组中
  194. list1.splice(id, 1); //从数组中清除当前项
  195. }
  196. list2.push(newlist); //将变量数组放入结果组数中
  197. }
  198. self.changeLists = list2;
  199. },
  200. /**
  201. * 分組入口方法
  202. */
  203. isgo: function() {
  204. var self = this;
  205. mui.confirm('確認將' + self.lists.length + '人,分為' + self.selectNum_ + '組?', '溫馨提示', ['再想想', '確定'], function(e) {
  206. console.log(e.index);
  207. if (e.index == 1) {
  208. self.isChange(self.lists, self.selectNum_)
  209. }
  210. }, 'div')
  211. },
  212. /**
  213. * 選擇 組數
  214. */
  215. selectNum: function() {
  216. var self = this;
  217. var picker = new mui.PopPicker();
  218. picker.setData([{
  219. value: '1',
  220. text: '分一組'
  221. }, {
  222. value: '2',
  223. text: '分二組'
  224. }, {
  225. value: '3',
  226. text: '分三組'
  227. }, {
  228. value: '4',
  229. text: '分四組'
  230. }, {
  231. value: '5',
  232. text: '分五組'
  233. }, {
  234. value: '6',
  235. text: '分六組'
  236. }, {
  237. value: '7',
  238. text: '分七組'
  239. }, {
  240. value: '8',
  241. text: '分八組'
  242. }]);
  243. picker.show(function(selectItems) {
  244. console.log(selectItems[0].text); //智子
  245. console.log(selectItems[0].value); //zz
  246. self.selectNum_ = selectItems[0].value
  247. })
  248. },
  249. /**
  250. * 點我編輯 / 編輯完成
  251. */
  252. updata: function() {
  253. var self = this;
  254. if (self.updata_.show_animate) {
  255. self.updata_.show_animate = false;
  256. } else {
  257. self.updata_.show_animate = true;
  258. }
  259. },
  260. /**
  261. * 點擊 item 修改項
  262. * @param {Object} e item 對象
  263. */
  264. updata_item: function(e) {
  265. var self = this;
  266. if (self.updata_.show_animate) {
  267. console.log(e);
  268. var index = e.target.dataset.index;
  269. var lists = self.lists;
  270. var list = lists[index]
  271. console.log(list);
  272. mui.prompt(' ', list.name, '請輸入更改後的名稱', ['刪除', '確定'], function(e) {
  273. if (e.index == 1 && e.value != "") {
  274. console.log(e);
  275. list.name = e.value;
  276. self.lists[index] = list;
  277. self.error();
  278. } else if (e.index == 0) {
  279. console.log(lists);
  280. lists.splice(index, 1);
  281. self.lists = lists;
  282. self.error();
  283. }
  284. }, 'div')
  285. }
  286. },
  287. /**
  288. * 添加 item
  289. */
  290. addUser: function() {
  291. var self = this;
  292. var lists = self.lists;
  293. mui.prompt(' ', '請輸入玩家姓名', '新增玩家', ['我再想想', '確定'], function(e) {
  294. e.index
  295. if (e.index == 1) {
  296. if (e.value != "") {
  297. var json = {};
  298. json.name = e.value;
  299. lists.push(json)
  300. self.lists = lists;
  301. self.error();
  302. } else {
  303. mui.toast('玩家姓名為空,取消添加')
  304. }
  305. }
  306. }, 'div')
  307. },
  308. /**
  309. * lists 發生變化時 , 提示.並清除分組數據
  310. */
  311. error: function() {
  312. var self = this;
  313. if (self.changeLists.length > 0) {
  314. mui.toast('人員出現變動, 請重新分組!')
  315. self.changeLists = [];
  316. }
  317. }
  318. }
  319. })
  320. </script>
  321. </body>
  322. </html>

发表评论

表情:
评论列表 (有 0 条评论,22人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Paxos的实际应用

    上一篇说明了paxos算法是如何实现数据一致性的,这一节我们来说明常见paxos的具体实际应用,这样可以更好的理解paxos的具体实现。 1、Paxos应用一Chubby