Commit 19e8ffeffba0b178a929f42d45fd5f8cc49a51d4
1 parent
47e9534a
直播海报分享优化显示
Showing
3 changed files
with
254 additions
and
7 deletions
packageA/pages/liveStream/liveStream.js
| @@ -46,7 +46,8 @@ Page({ | @@ -46,7 +46,8 @@ Page({ | ||
| 46 | screenWidth: 0, | 46 | screenWidth: 0, |
| 47 | canvasHidden: 1, | 47 | canvasHidden: 1, |
| 48 | gid: '', | 48 | gid: '', |
| 49 | - shareImgPath: '' | 49 | + shareImgPath: '', |
| 50 | + shartitle:"" | ||
| 50 | }, | 51 | }, |
| 51 | // list: [], | 52 | // list: [], |
| 52 | // live: { | 53 | // live: { |
| @@ -335,13 +336,15 @@ Page({ | @@ -335,13 +336,15 @@ Page({ | ||
| 335 | // 分享操作表 | 336 | // 分享操作表 |
| 336 | clickShare: function (e) { | 337 | clickShare: function (e) { |
| 337 | var sharimg = e.currentTarget.dataset.sharimg | 338 | var sharimg = e.currentTarget.dataset.sharimg |
| 339 | + var shartitle = e.currentTarget.dataset.shartitle | ||
| 338 | if(!getApp().globalData.user_id){ | 340 | if(!getApp().globalData.user_id){ |
| 339 | getApp().goto("/packageE/pages/togoin/togoin"); | 341 | getApp().goto("/packageE/pages/togoin/togoin"); |
| 340 | return false; | 342 | return false; |
| 341 | } | 343 | } |
| 342 | this.setData({ | 344 | this.setData({ |
| 343 | showActionSheet: !this.data.showActionSheet, | 345 | showActionSheet: !this.data.showActionSheet, |
| 344 | - sharimg : sharimg | 346 | + sharimg : sharimg, |
| 347 | + shartitle:shartitle | ||
| 345 | }) | 348 | }) |
| 346 | }, | 349 | }, |
| 347 | 350 | ||
| @@ -406,7 +409,7 @@ Page({ | @@ -406,7 +409,7 @@ Page({ | ||
| 406 | if(!this.data.coverImg) { | 409 | if(!this.data.coverImg) { |
| 407 | 410 | ||
| 408 | // 请求主图 | 411 | // 请求主图 |
| 409 | - await that.getImageInfo(that.data['shareimg']).then(res => { | 412 | + await that.getImageInfo(that.data.sharimg).then(res => { |
| 410 | that.setData({ | 413 | that.setData({ |
| 411 | coverImg: res.path, | 414 | coverImg: res.path, |
| 412 | coverImgWidth: res.width, | 415 | coverImgWidth: res.width, |
| @@ -446,7 +449,7 @@ Page({ | @@ -446,7 +449,7 @@ Page({ | ||
| 446 | 449 | ||
| 447 | 450 | ||
| 448 | // 数据准备 | 451 | // 数据准备 |
| 449 | - const title = this.data.details.name; | 452 | + const title = this.data.shartitle; |
| 450 | // const headImg = app.globalData.userInfo['head_pic']; | 453 | // const headImg = app.globalData.userInfo['head_pic']; |
| 451 | 454 | ||
| 452 | // console.log('----------------v', headImg); | 455 | // console.log('----------------v', headImg); |
| @@ -573,6 +576,68 @@ Page({ | @@ -573,6 +576,68 @@ Page({ | ||
| 573 | 576 | ||
| 574 | }, | 577 | }, |
| 575 | 578 | ||
| 579 | + | ||
| 580 | + | ||
| 581 | + imageResize(imgWidth, imgHeight) { | ||
| 582 | + var imageSize = {}; | ||
| 583 | + var originalWidth = imgWidth;//图片原始宽 | ||
| 584 | + var originalHeight = imgHeight;//图片原始高 | ||
| 585 | + var originalScale = originalHeight/originalWidth;//图片高宽比 | ||
| 586 | + // console.log('originalWidth: ' + originalWidth) | ||
| 587 | + // console.log('originalHeight: ' + originalHeight) | ||
| 588 | + | ||
| 589 | + //获取屏幕宽高 | ||
| 590 | + var winWidth = 480; | ||
| 591 | + var winHeight = 380; | ||
| 592 | + var winScale = winHeight/winWidth;//屏幕高宽比 | ||
| 593 | + // console.log('windowWidth: ' + winWidth) | ||
| 594 | + // console.log('windowHeight: ' + winHeight) | ||
| 595 | + if(originalScale < winScale){//图片高宽比小于屏幕高宽比 | ||
| 596 | + //图片缩放后的宽为屏幕宽 | ||
| 597 | + imageSize.imageWidth = winWidth; | ||
| 598 | + imageSize.imageHeight = (winWidth * originalHeight) / originalWidth; | ||
| 599 | + }else{//图片高宽比大于屏幕高宽比 | ||
| 600 | + //图片缩放后的高为屏幕高 | ||
| 601 | + imageSize.imageHeight = winHeight; | ||
| 602 | + imageSize.imageWidth = (winHeight * originalWidth) / originalHeight; | ||
| 603 | + } | ||
| 604 | + console.log('缩放后的宽: ' + imageSize.imageWidth) | ||
| 605 | + console.log('缩放后的高: ' + imageSize.imageHeight) | ||
| 606 | + return imageSize; | ||
| 607 | + }, | ||
| 608 | + | ||
| 609 | + | ||
| 610 | +//文本换行 参数:1、canvas对象,2、文本 3、距离左侧的距离 4、距离顶部的距离 5、6、文本的宽度 | ||
| 611 | +drawText: function(ctx, str, leftWidth, initHeight, titleHeight, canvasWidth, unit) { | ||
| 612 | + var lineWidth = 0; | ||
| 613 | + var lastSubStrIndex = 0; //每次开始截取的字符串的索引 | ||
| 614 | + var han = 0; | ||
| 615 | + for (let i = 0; i < str.length; i++) { | ||
| 616 | + if (han == 2) return; | ||
| 617 | + //lineWidth += ctx.measureText(str[i]).width; | ||
| 618 | + lineWidth += ut.measureText(str[i], 21.3 * unit); | ||
| 619 | + if (lineWidth > canvasWidth) { | ||
| 620 | + han++; | ||
| 621 | + | ||
| 622 | + if (han == 2) { | ||
| 623 | + ctx.textAlign = 'justify'; | ||
| 624 | + ctx.fillText(str.substring(lastSubStrIndex, i) + '...', leftWidth, initHeight); //绘制截取部分 | ||
| 625 | + } else { | ||
| 626 | + ctx.textAlign = 'justify'; | ||
| 627 | + ctx.fillText(str.substring(lastSubStrIndex, i), leftWidth, initHeight); | ||
| 628 | + } | ||
| 629 | + initHeight += 35; //22为字体的高度 | ||
| 630 | + lineWidth = 0; | ||
| 631 | + lastSubStrIndex = i; | ||
| 632 | + titleHeight += 20; | ||
| 633 | + } | ||
| 634 | + if (i == str.length - 1) { //绘制剩余部分 | ||
| 635 | + ctx.textAlign = 'justify'; | ||
| 636 | + ctx.fillText(str.substring(lastSubStrIndex, i + 1), leftWidth, initHeight); | ||
| 637 | + } | ||
| 638 | + } | ||
| 639 | +}, | ||
| 640 | + | ||
| 576 | /** | 641 | /** |
| 577 | * 页面相关事件处理函数--监听用户下拉动作 | 642 | * 页面相关事件处理函数--监听用户下拉动作 |
| 578 | */ | 643 | */ |
| @@ -694,7 +759,145 @@ Page({ | @@ -694,7 +759,145 @@ Page({ | ||
| 694 | }); | 759 | }); |
| 695 | 760 | ||
| 696 | return p; | 761 | return p; |
| 697 | - }, | 762 | + }, |
| 763 | + | ||
| 764 | + | ||
| 765 | + // 保存图片到手机 | ||
| 766 | + onSaveToPhone() { | ||
| 767 | + var self = this; | ||
| 768 | + // 获取用户的当前设置,返回值中有小程序已经向用户请求过的权限 | ||
| 769 | + this.getSetting().then((res) => { | ||
| 770 | + // 判断用户是否授权了保存到相册的权限,如果没有发起授权 | ||
| 771 | + if (!res.authSetting['scope.writePhotosAlbum']) { | ||
| 772 | + this.authorize().then(() => { | ||
| 773 | + // 同意授权后保存下载文件 | ||
| 774 | + this.saveImageToPhotosAlbum(self.data.canvasToImgPath) | ||
| 775 | + }) | ||
| 776 | + } else { | ||
| 777 | + // 如果已经授权,保存下载文件 | ||
| 778 | + this.saveImageToPhotosAlbum(self.data.canvasToImgPath) | ||
| 779 | + } | ||
| 780 | + }) | ||
| 781 | + }, | ||
| 782 | + | ||
| 783 | + //打开设置,引导用户授权 | ||
| 784 | + onOpenSetting() { | ||
| 785 | + wx.openSetting({ | ||
| 786 | + success:(res) => { | ||
| 787 | + // console.log(res.authSetting) | ||
| 788 | + } | ||
| 789 | + }) | ||
| 790 | + }, | ||
| 791 | + | ||
| 792 | + // 获取用户已经授予了哪些权限 | ||
| 793 | + getSetting() { | ||
| 794 | + return new Promise((resolve, reject) => { | ||
| 795 | + wx.getSetting({ | ||
| 796 | + success: res => { | ||
| 797 | + resolve(res) | ||
| 798 | + } | ||
| 799 | + }) | ||
| 800 | + }) | ||
| 801 | + }, | ||
| 802 | + | ||
| 803 | + // 发起首次授权请求 | ||
| 804 | + authorize() { | ||
| 805 | + // isFirst 用来记录是否为首次发起授权, | ||
| 806 | + // 如果首次授权拒绝后,isFirst赋值为1 | ||
| 807 | + let isFirst = wx.getStorageSync('isFirst') || 0; | ||
| 808 | + return new Promise((resolve, reject) => { | ||
| 809 | + wx.authorize({ | ||
| 810 | + scope: 'scope.writePhotosAlbum', | ||
| 811 | + // 同意授权 | ||
| 812 | + success: () => { | ||
| 813 | + resolve(); | ||
| 814 | + }, | ||
| 815 | + // 拒绝授权,这里是用户拒绝授权后的回调 | ||
| 816 | + fail: res => { | ||
| 817 | + if(isFirst === 0) { | ||
| 818 | + wx.setStorageSync('isFirst', 1); | ||
| 819 | + wx.showToast({ | ||
| 820 | + title: '保存失败', | ||
| 821 | + icon: 'none', | ||
| 822 | + duration: 1000 | ||
| 823 | + }) | ||
| 824 | + } else { | ||
| 825 | + this.showModal(); | ||
| 826 | + } | ||
| 827 | + console.log('拒绝授权'); | ||
| 828 | + reject(); | ||
| 829 | + } | ||
| 830 | + }) | ||
| 831 | + }) | ||
| 832 | + }, | ||
| 833 | + | ||
| 834 | + //保存下载文件 | ||
| 835 | + savedownloadFile(img) { | ||
| 836 | + this.downLoadFile(img).then((res) => { | ||
| 837 | + return this.saveImageToPhotosAlbum(res.tempFilePath) | ||
| 838 | + }).then(() => { | ||
| 839 | + // resolve() | ||
| 840 | + }) | ||
| 841 | + }, | ||
| 842 | + | ||
| 843 | + //单文件下载(下载文件资源到本地),客户端直接发起一个 HTTPS GET 请求,返回文件的本地临时路径。 | ||
| 844 | + downLoadFile(img) { | ||
| 845 | + var self = this; | ||
| 846 | + return new Promise((resolve, reject) => { | ||
| 847 | + wx.showLoading({ | ||
| 848 | + title: '保存中...', | ||
| 849 | + mask: true, | ||
| 850 | + }); | ||
| 851 | + wx.downloadFile({ | ||
| 852 | + url: img, | ||
| 853 | + success: (res) => { | ||
| 854 | + resolve(res); | ||
| 855 | + } | ||
| 856 | + }) | ||
| 857 | + }) | ||
| 858 | + }, | ||
| 859 | + | ||
| 860 | + // 保存图片到系统相册 | ||
| 861 | + saveImageToPhotosAlbum(saveUrl) { | ||
| 862 | + var self = this; | ||
| 863 | + return new Promise((resolve, reject) => { | ||
| 864 | + wx.saveImageToPhotosAlbum({ | ||
| 865 | + filePath: saveUrl, | ||
| 866 | + success: (res) => { | ||
| 867 | + wx.showToast({ | ||
| 868 | + title: '保存成功', | ||
| 869 | + duration: 1000, | ||
| 870 | + }); | ||
| 871 | + self.setData({ | ||
| 872 | + showPlaybill: 'true' | ||
| 873 | + }); | ||
| 874 | + resolve(); | ||
| 875 | + }, | ||
| 876 | + fail: () => { | ||
| 877 | + wx.showToast({ | ||
| 878 | + title: '保存失败', | ||
| 879 | + duration: 1000, | ||
| 880 | + }); | ||
| 881 | + } | ||
| 882 | + }) | ||
| 883 | + }) | ||
| 884 | + }, | ||
| 885 | + | ||
| 886 | + | ||
| 887 | + // 弹出模态框提示用户是否要去设置页授权 | ||
| 888 | + showModal() { | ||
| 889 | + wx.showModal({ | ||
| 890 | + title: '检测到您没有打开保存到相册的权限,是否前往设置打开?', | ||
| 891 | + success: (res) => { | ||
| 892 | + if (res.confirm) { | ||
| 893 | + console.log('用户点击确定') | ||
| 894 | + this.onOpenSetting() // 打开设置页面 | ||
| 895 | + } else if (res.cancel) { | ||
| 896 | + console.log('用户点击取消') | ||
| 897 | + } | ||
| 898 | + } | ||
| 899 | + }) | ||
| 900 | + }, | ||
| 698 | 901 | ||
| 699 | 902 | ||
| 700 | /** | 903 | /** |
packageA/pages/liveStream/liveStream.wxml
| @@ -85,7 +85,7 @@ | @@ -85,7 +85,7 @@ | ||
| 85 | {{item['anchor_name']}}</view> | 85 | {{item['anchor_name']}}</view> |
| 86 | </view> | 86 | </view> |
| 87 | <view style="width: 30%;height: 90rpx;align-items: center;justify-items: center;"> | 87 | <view style="width: 30%;height: 90rpx;align-items: center;justify-items: center;"> |
| 88 | - <view bindtap="clickShare" data-sharimg="{{item.share_img}}" class="display: flex;" style="width: 70%;border-radius: 25rpx;border: 1rpx solid #fc6247;height: 46rpx;margin-top: 25rpx;margin-left: 30rpx;"> | 88 | + <view bindtap="clickShare" data-sharimg="{{item.share_img}}" data-shartitle="{{item.name}}" class="display: flex;" style="width: 70%;border-radius: 25rpx;border: 1rpx solid #fc6247;height: 46rpx;margin-top: 25rpx;margin-left: 30rpx;"> |
| 89 | <view class="share-image"></view> | 89 | <view class="share-image"></view> |
| 90 | <view class="fs26" style="color: #fc6247;margin-left: 10rpx;line-height: 46rpx;"> 分享 </view> | 90 | <view class="fs26" style="color: #fc6247;margin-left: 10rpx;line-height: 46rpx;"> 分享 </view> |
| 91 | </view> | 91 | </view> |
packageA/pages/liveStream/liveStream.wxss
| @@ -257,6 +257,50 @@ subscribe { | @@ -257,6 +257,50 @@ subscribe { | ||
| 257 | } | 257 | } |
| 258 | 258 | ||
| 259 | .share-actionSheet.active ~ .mask, | 259 | .share-actionSheet.active ~ .mask, |
| 260 | + | ||
| 261 | +.mask { | ||
| 262 | + display: none; | ||
| 263 | + background-color: rgba(0,0,0,.7); | ||
| 264 | + position: fixed; | ||
| 265 | + top: 0; | ||
| 266 | + bottom: 0; | ||
| 267 | + left: 0; | ||
| 268 | + right: 0; | ||
| 269 | +} | ||
| 270 | +.playbill { | ||
| 271 | + position: fixed; | ||
| 272 | + left: 50%; | ||
| 273 | + top: 50%; | ||
| 274 | + transform: translate(-50%, -50%); | ||
| 275 | + z-index: 9999; | ||
| 276 | + background: none; | ||
| 277 | +} | ||
| 278 | +.share-actionSheet.active ~ .mask, | ||
| 260 | .playbill.active ~ .mask { | 279 | .playbill.active ~ .mask { |
| 261 | display: block; | 280 | display: block; |
| 262 | -} | ||
| 263 | \ No newline at end of file | 281 | \ No newline at end of file |
| 282 | +} | ||
| 283 | +.playbill-pic { | ||
| 284 | + display: block; | ||
| 285 | + width: 560rpx; | ||
| 286 | + height: auto; | ||
| 287 | + margin: 0 auto 26rpx; | ||
| 288 | + border-radius: 10rpx; | ||
| 289 | + overflow: hidden; | ||
| 290 | +} | ||
| 291 | + | ||
| 292 | +.playbill-save { | ||
| 293 | + width: 560rpx; | ||
| 294 | + height: 100rpx; | ||
| 295 | + line-height: 100rpx; | ||
| 296 | + background-color: #f23030; | ||
| 297 | + color: #fff; | ||
| 298 | + font-size: 36rpx; | ||
| 299 | + text-align: center; | ||
| 300 | + margin: 0 auto; | ||
| 301 | +} | ||
| 302 | +.playbill-save image { | ||
| 303 | + width: 44rpx; | ||
| 304 | + height: 36rpx; | ||
| 305 | + margin-right: 23rpx; | ||
| 306 | +} | ||
| 307 | + |