草庐IT

微信小程序 webview页面分享弹窗

feiyupang 2025-05-27 原文

微信小程序webview中使用cover-view展示分享弹窗

公司业务需要在webview中添加分享弹窗,可以发送给朋友及生成海报分享,因为好几个详情都需要这个功能,因此抽离了share-sheet的组件,ui效果如下图:

点击分享,显示以下弹窗

share-sheet.wxml如下:

<cover-view class="share-sheet-container" hidden="{{!show}}" catchtouchmove="poptouchmove">
        <cover-view class="shade"></cover-view>
        <cover-view class="content">
            <button class="row share-friend-btn border-bottom" open-type="share" hover-class="none">发送给朋友</button>
            <cover-view class="row create-poster-btn" catchtap="createPosterAction">生成海报</cover-view>
            <cover-view class="row quick-btn" catchtap="quickAction">取消</cover-view>
        </cover-view>
         <cover-view class="palceholder"></cover-view>
    </cover-view>

share-sheet.js如下:

Component({
options: {
    addGlobalClass: true,
},
/**
 * 组件的属性列表
 */
properties: {
    //控制弹窗显示与否
    show: {
        type: Boolean,
        value: false,
    },
    //分享数据
    shareData: {
        type: Object,
        value: null,
    },
},
data: {
    showPreviewPoster: false, //是否显示生成的海报弹窗
    poster: '', //生成的海报路径 用来判断是否可以点击生成海报
    clickCreatePosterBtn: false, // 是否点击了生成海报按钮 用来判断在没有海报时点击生成海报 带海报完善后直接显示海报预览弹窗
},

/**
 * 组件的方法列表
 */
methods: {
    //阻止滑动事件 防止page滑动
    poptouchmove: function () {
        return false;
    },
    //点击去掉按钮
    quickAction() {
        this.data.show = false;
        this.setData({
            show: false,
        });
    },
    //点击生成海报按钮
    createPosterAction() {
        this.setData({
            show: false,
        });
        if (!this.data.poster) {
            this.setData({
                clickCreatePosterBtn: true,
            });
            return false;
        }
        this.setData({
            showPreviewPoster: true,
            clickCreatePosterBtn: false,
        });
    },
    setPosterStatus(e) {
        this.setData({
            poster: e.detail,
        });
    },
},
});

share-sheet.less如下:

.share-sheet-container {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 1001;
    .shade {
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        background: rgba(0, 0, 0, 0.3);
        z-index: 1;
    }
    .palceholder {
        position: absolute;
        left: 0;
        right: 0;
        bottom: 0;
        background: #fff;
        height: 40rpx;
        box-sizing: content-box;
        padding-bottom: env(safe-area-inset-bottom);
        z-index: 2;
    }
    .content {
        position: absolute;
        padding-bottom: env(safe-area-inset-bottom);
        left: 0;
        right: 0;
        bottom: 0;
        background: #f2f2f2;
        border-radius: 40rpx;
        z-index: 3;
        overflow: hidden;
    }
    .row {
        display: block;
        height: 112rpx;
        line-height: 111rpx;
        font-size: 34rpx;
        color: #000;
        text-align: center;
        background: #fff;
        &.share-friend-btn {
            border: none;
            margin-bottom: 1px;
        }
    }
    .quick-btn {
        margin-top: 16rpx;
    }
}

注意的点:

一下均为真机测试,实际情况可能会随着时间改变,请注意自测

  1. webview上添加结构只能使用cover-view,想要显示出来需要用fixed/absolute定位,且不能使用hidden,可以直接显示或者使用wx:if
  2. cover-view支持flex布局
  3. cover-image不支持svg格式图片
  4. cover-view 不支持background-image,不支持iconfont图标
  5. cover-view中button须有文本,否则不显示
  6. cover-view不支持设置单边的border,ui弹窗只有上面有圆角我的处理方式是在下面写个空的cover-view定位填充
  7. cover-view支持overflow-y, 但是不支持over-flow:auto, 滚动本身不会引起穿透

有关微信小程序 webview页面分享弹窗的更多相关文章

  1. 微信小程序通过字典表匹配对应数据 - 2

    前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立

  2. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  3. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  4. ruby - 在 ASP 页面上 Mechanize 中断 - 2

    require'mechanize'agent=Mechanize.newlogin=agent.get('http://www.schoolnet.ch/DE/HomeDE.htm')agent.clicklogin.link_withtext:/Login/然后我得到Mechanize::UnsupportedSchemeError。 最佳答案 Mechanize不支持javascript但您可以将搜索字段添加到表单并为其分配搜索词并使用mechanize提交表单form=page.forms.firstform.add_fie

  5. ruby-on-rails - prawnto 显示新页面时不会中断的表格 - 2

    我有可变数量的表格和可变数量的行,我想让它们一个接一个地显示,但如果表格不适合当前页面,请将其放在下一页,然后继续。我已将表格放入事务中,以便我可以回滚然后打印它(如果高度适合当前页面),但我如何获得表格高度?我现在有这段代码pdf.transactiondopdf.table@data,:font_size=>12,:border_style=>:grid,:horizontal_padding=>10,:vertical_padding=>3,:border_width=>2,:position=>:left,:row_colors=>["FFFFFF","DDDDDD"]pdf.

  6. ruby - 每个页面上的 Jekyll 分页 - 2

    据我们所知,Jekyll默认分页仅支持index.html,我想创建blog.html并在那里包含分页。有什么解决办法吗? 最佳答案 如果您创建一个名为/blog的目录并在其中放置一个index.html文件,那么您可以向_config.yml表示paginate_path:"blog/page:num"。不是使用根文件夹中的默认index.html作为分页器模板,而是使用/blog/index.html。分页器将根据需要生成类似/blog/page2/和/blog/page3/的页面。这将使您到达yourwebsite.com/b

  7. ruby-on-rails - RoR && "coming soon"页面 - 2

    我正在寻找一种简单的方法来为我在RubyonRails上的项目实现简单的“即将推出”(预启动)页面。用户应该能够留下电子邮件以便在项目启动时收到通知。有没有这样的插件\gem?或者我应该自己做... 最佳答案 LaunchingSoon是一个Rails插件。它还集成了MailChimp或Campaignmonitor. 关于ruby-on-rails-RoR&&"comingsoon"页面,我们在StackOverflow上找到一个类似的问题: https:/

  8. ruby - 如何让 GitHub 页面使用 master 分支? - 2

    我有一个使用Jekyll托管在GitHub上的静态网站。问题是,我真的不需要master分支,因为存储库唯一包含的是网站。这样我就必须gitcheckoutgh-pages,然后gitmergemaster,然后gitpushorigingh-pages。有什么简单的方法可以摆脱gh-pages分支并直接从master推送? 最佳答案 Theproblemis,Idon'treallyneedthemasterbranch,astheonlythingtherepositorycontainsisthewebsite.Isthere

  9. ruby - 如何设置 Mechanize 页面编码? - 2

    我试图通过点击一个链接获得一个带有ISO-8859-1编码的页面,所以代码类似于这样:page_result=page.link_with(:text=>'link_text').click到目前为止,我得到的结果编码错误,所以我看到的字符如下:'T�tulo:'insteadof'Título:'我尝试了几种方法,包括:使用代理在第一个请求中声明编码:@page_search=@agent.get(:url=>'http://www.server.com',:headers=>{'Accept-Charset'=>'ISO-8859-1'})说明页面本身的编码page_result.

  10. Ubuntu20.04系统WineHQ7.0安装微信 - 2

    提供3种Ubuntu系统安装微信的方法,在Ubuntu20.04上验证都ok。1.WineHQ7.0安装微信:ubuntu20.04安装最新版微信--可以支持微信最新版,但是适配的不是特别好;比如WeChartOCR.exe报错。2.原生微信安装:linux系统下的微信安装(ubuntu20.04)--微信适配的最好,反应最快,但是微信版本只到2.1.1,版本太老,很多功能都没有。3.深度deepin-wine6安装微信:ubuntu20.04+系统deepin-wine6安装新版微信--综合比较好,当前个人使用此种方法1个月,微信版本3.4;没什么大问题,尚可。一、WineHQ7.0安装微信

随机推荐