handle.ts 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. import {nextTick} from "vue";
  2. export default {
  3. data(){
  4. return {
  5. queueTime:0
  6. }
  7. },
  8. methods:{
  9. // 播放礼物动画
  10. pushGift(item,uid:Array<string | number> | string | number,sendUid){
  11. if (item.pcplay_image || item.play_image){
  12. let type = item.gift_type.toString();
  13. if (type === '1') {
  14. let resultUid:Array<string | number> = [];
  15. if (!(uid instanceof Array)) {
  16. resultUid = [uid]
  17. } else {
  18. resultUid = uid;
  19. }
  20. let queueData = [];
  21. // 获取礼物布局信息
  22. let giftOffsets = this.getInfoOffset('gift-active-'+item.gid);
  23. if (giftOffsets) {
  24. if (item.translate) {
  25. giftOffsets.x = giftOffsets.x + item.translate;
  26. }
  27. } else if (!giftOffsets) {
  28. giftOffsets = this.getInfoOffset('room-gift-container');
  29. }
  30. // 获取用户布局信息结果
  31. resultUid.map((item)=>{
  32. let result = this.getInfoOffset('user-'+item);
  33. if (result) {
  34. if (giftOffsets) {
  35. queueData.push({
  36. offset:result,
  37. giftOffsets,
  38. ...giftOffsets
  39. });
  40. } else {
  41. queueData.push({
  42. ...result,
  43. });
  44. }
  45. }
  46. return result;
  47. });
  48. if (queueData.length > 0) {
  49. this.pushQueue({
  50. type:type,
  51. data:queueData,
  52. item,
  53. play:!giftOffsets,
  54. draw:!giftOffsets
  55. },sendUid);
  56. } else {
  57. this.pushQueue({
  58. type:'2',
  59. item
  60. },sendUid);
  61. }
  62. } else {
  63. this.pushQueue({
  64. type:type,
  65. item
  66. },sendUid);
  67. }
  68. }
  69. },
  70. triggerChangeQueue(useQueueItem){
  71. if (useQueueItem && useQueueItem.type === '1' && !useQueueItem.play) {
  72. setTimeout(()=>{
  73. useQueueItem.data = useQueueItem.data.map((item)=>{
  74. return {
  75. ...item,
  76. ...item.offset,
  77. }
  78. });
  79. useQueueItem.draw = true;
  80. setTimeout(()=>{
  81. useQueueItem.play = true;
  82. },1500);
  83. },10);
  84. }
  85. },
  86. // 获取用户位置信息
  87. getInfoOffset(id){
  88. if (id) {
  89. let el = document.getElementById(id);
  90. if (el) {
  91. return {
  92. x: this.getOffset(el,'offsetLeft'),
  93. y: this.getOffset(el,'offsetTop'),
  94. width: el.offsetWidth,
  95. height: el.offsetHeight
  96. }
  97. }
  98. }
  99. return null;
  100. },
  101. getOffset(el,offset='offsetLeft'){
  102. let offsetValue = el[offset] || 0;
  103. let target = el;
  104. while (target.offsetParent) {
  105. offsetValue += target.offsetParent[offset];
  106. target = target.offsetParent;
  107. }
  108. return offsetValue;
  109. }
  110. }
  111. }