wx-open-subscribe カスタム スタイルとボタンが無効です [解決済み]

ミニ プログラムのようなサブスクリプション メッセージ ポップアップ ボックスを WeChat 公式アカウントに追加する必要があり、ユーザーは [許可] をクリックしてメッセージをユーザーにプッシュする必要があります。以下に示すように

ここに画像の説明を挿入します
WeChat 公式ドキュメント: wx-open-subscribe

公式の例は次のとおりです。

ここに画像の説明を挿入します
このコードは一目で理解できる<wx-open-subscribeが入っており、使い方も公式が大まかに説明しています。
ここに画像の説明を挿入します

問題が発生しました

私たちは独自のビジネスを統合し、wx ドキュメントに従ってボタンとスタイルをカスタマイズしました。その目的は、次のような効果を実現することです。「今すぐ購入する」をクリックすると、メッセージ購読ポップアップ ボックスが
ここに画像の説明を挿入します
表示されます。ただし、WeChat ドキュメントによると、結果は上の図のようになりません (フロントエンド フレームワーク)は freemark であり、Vue ではありません。インターネット上にたくさんあります。サンプルはすべて vue です)
ここに画像の説明を挿入します
スタイルは完全にめちゃくちゃですが、公式ドキュメントによると、コードを自己チェックしたところ、問題は見つかりませんでした。

まずはセルフチェック


<wx-open-subscribe template="DAIkcS0au7ryCPVFXg1-N6CbEz6c6eYNB4I8" id="subscribe-btn" >
        <script type="text/wxtag-template" slot="style">
            <style>
                .paywraper{
    
    
                    line-height: 1.3rem;
                    padding-left: 0.3rem;
                    position:fixed;
                    bottom: 0;
                    left: 0;
                    text-align: center;
                    width: 100%;
                    box-shadow: 0 0 0.3rem 0 rgba(0,0,0,.1);
                }
                .bg-fff{
    
    
                    background-color: #fff;
                }
                .o-h{
    
    
                    overflow: hidden;
                }
                .f-l{
    
    
                    float: left;
                }
                .ppvalue{
    
    

                }
                .paybtn{
    
    
                    background-color: #36d5dd;
                    color: #fff;
                    width: 2.5rem;
                    height: 1.3rem;
                    line-height: 1.3rem;
                }
                .f-r{
    
    
                    float: right;
                }
            </style>
        </script>

        <script type="text/wxtag-template">
            <div class="paywraper bg-fff o-h">
                <div class='f-l'>总计: <span style="color: #ff7800;" id="payValue">11</span></div>
                <div class='paybtn f-r' id="payBtn">立即购买</div>
            </div>
        </script>
    </wx-open-subscribe>

公式の wx ドキュメントに次のような注記があることに今気づきましたか?

ここに画像の説明を挿入します
この状況はたまたまスタイルにも存在するため、これに基づいて次のように改善し、これらのレイアウトと位置関連のスタイルをラベルまたは親ノードに配置します。

<wx-open-subscribe template="DAIkcS0au7ryCPVFXg1-N6CbEz6c6eYNB4I8" id="subscribe-btn"
                       style="position:fixed; line-height: 1.3rem; bottom: 0; left: 0; text-align: center;
                   width: 100% ; box-shadow: 0 0 0.3rem 0 rgba(0,0,0,.1)">
        <script type="text/wxtag-template" slot="style">
            <style>
                .subscribe-btn2 {
    
    
                    color: #ce3c39;
                    background-color: #07c160;
                }
                /*.paywraper{*/
                /*    line-height: 1.3rem !important;*/
                /*    padding-left: 0.3rem !important;*/
                /*    bottom: 0 !important;*/
                /*    left: 0 !important;*/
                /*    text-align: center !important;*/
                /*    width: 100% !important;*/
                /*    box-shadow: 0 0 0.3rem 0 rgba(0,0,0,.1) !important;*/
                /*}*/

                .bg-fff{
    
    
                    background-color: #fff !important;
                }
                .o-h{
    
    
                    overflow: hidden !important;
                }
                .f-l{
    
    
                    float: left !important;
                }
                .ppvalue{
    
    
                    color: #ff7800 !important;
                }
                .paybtn{
    
    
                    background-color: #36d5dd !important;
                    color: #fff !important;
                    width: 2.5rem !important;
                    height: 1.3rem !important;
                    line-height: 1.3rem !important;
                }
                .f-r{
    
    
                    float: right !important;
                }
            </style>
        </script>
        <script type="text/wxtag-template" >
            <div class="paywraper bg-fff o-h">
                <div class='f-l'>总计: <span style="color: #ff7800;" id="payValue">11</span></div>
                <div class='paybtn f-r' id="payBtn">立即购买</div>
            </div>
        </script>
    </wx-open-subscribe>

wx コミュニティの多くの投稿を読みましたが、どれも同じで、解決策は効果がありません。注意深く分析した結果、実際には理由は 3 つだけであることがわかりました。

1. wx タグが独自のスタイルを飲み込む

2. 一部のスタイルは wx タグと互換性がありません

3. wx タグを不適切に使用しているため、スタイルが正しくありません。

しかし、最初の点はすぐに削除されます。それが飲み込まれてしまうと、なぜ一部の CSS が OK になるのでしょうか。3 番目の点の問題点を探していて、多くの落とし穴にはまってしまいました。2 番目の点の非互換性については、どのスタイルが互換性がありませんか?

後でそれがレムの問題だったことが分かりました

rem はルート要素(html)のフォントサイズを表す相対単位です。CSS では、rem を使用して要素のフォント サイズ、幅、高さ、その他の属性を設定し、ルート要素のフォント サイズを基準にして拡大縮小することができます。

これは wx タグでは無効であるため、絶対ピクセルの高さと幅に変更する必要があります。これで問題は完全に解決されます。

<wx-open-subscribe
            template="DAIkcS0au7ryCPVFXg1-N6CbEz6c6eYNB4I8"
            id="subscribe-btn"
            class="paywraper bg-fff o-h"
            style="line-height: 1.3rem; padding-left: 0.3rem; position: fixed; bottom: 0; left: 0; text-align: center;
width: 100%; box-shadow: 0 0 0.3rem 0 rgba(0,0,0,.1); background-color: #fff; overflow: hidden;">
        <#--<span class="ppvalue" id="payValue">11</span>-->
        <script type="text/wxtag-template" slot="style">
            <style>
                .f-l{
    
    
                    float: left;
                    text-size: 16px ;
                    text-align: center ;
                    line-height: 69px ;
                }
                .ppvalue{
    
    
                    color: #ff7800 ;
                    text-size: 16px ;
                }
                .paybtn{
    
    
                    background-color: #36d5dd ;
                    color: #fff ;
                    width: 133px ;
                    height: 69px ;
                    line-height: 69px ;
                }
                .f-r{
    
    
                    float: right ;
                    text-size: 16px ;
                    text-align: center ;
                }
            </style>
        </script>
        <script type="text/wxtag-template" id="payTemplate">
            <div class="paywraper" id="test2">
                <div class='f-l'>总计: <span class="ppvalue" id="payValue"></span></div>
                <div class='paybtn f-r' id="payBtn">立即购买</div>
            </div>
        </script>
    </wx-open-subscribe>

コードに合計や金額などの動的な割り当てが入っているので、ここで展開してみますが、wx-open-subscribeタグを追加したため、jsでは内部のidクラスなどが取得できなくなりました。

通常は以下のコードを使用できます

$("#payValue").text(11)

しかし、これは機能しないので、解決策は何でしょうか。次のコードの原則は、タグの下の HTML を取得し、それを解析して 2 回目に割り当てることです。

        var templateContent = document.getElementById("payTemplate").textContent;
        var parser = new DOMParser();
        var doc = parser.parseFromString(templateContent, 'text/html');
        var payValueElement = doc.getElementById("payValue");
        payValueElement.textContent = 11;
        document.getElementById("payTemplate").textContent = doc.body.innerHTML;

OK、私は穴を通り抜けました、それがあなたを助けることを願っています。

おすすめ

転載: blog.csdn.net/yangning_/article/details/132982966