首页 前端知识 h5手机端如何快速的兼容富文本内容

h5手机端如何快速的兼容富文本内容

2024-04-29 11:04:59 前端知识 前端哥 865 242 我要收藏

     最近客户需要修改一个手机端合同签约样子,但是他们的合同内容是后端加载过来的,为了保留他们原有的功能,尽可能的让手机端的样子和PC端一致,我使用了css中的transform属性,因为他们合同的正常显示的宽度大概是900px,所以将外层的div进行transform的缩放,并且为了兼容高度用js重新计算一个transform缩放后的高度的,下面是大概的场景和解决方案

<style>
@media only screen and (max-width: 767px) {
  /* 移动设备样式 */
   .treary_box{
        width: 900px;
        transform-origin: top left;
		transform: scale(0.37);
    }
    .cons{
      display: inline-block; /* 用于包裹所有元素,但不撑开.height */
      overflow: hidden;
}
}
   
    .treary_name{font-size: 25px;text-align: center}
    .treary_content{margin-top: 5px}
    .treary_content img{max-width: 100%!important;}
    .form_tip{font-size: 20px;text-align: center;color: red}
    .my_form{margin-top: 15px}
    .signature_tip{text-align: center;font-weight: bold;font-size: 18px}
    .signature{background-color: #eeeeee;margin: 20px auto}
    .signature_but_box{margin: 20px;height: 25px;}
    .signature_but{height: 25px;width: 50%;float: left;}
    .img_box{max-width: 95%;display: block;margin: 0 auto}
    .n-default .msg-wrap{position: relative;}
    /*.login-section{min-height: 550px}*/
    .showproduct {
    margin: 10px;
	font-size: 18px;
}
span.txt.flex1 {
    text-align: center;
}
.showproduct {
    background: #fff;
    font-family: 'Microsoft Yahei';
    padding: .25rem .3rem;
    position: relative;
}

    .popupBox{background: rgba(0, 0, 0, 0.3);position: fixed;top: 0;bottom: 0;right: 0;left: 0;display: none;justify-content: center;align-items: center;}
    .popup{background: #fff;border-radius: 10px;overflow: hidden;}
    .btnBox{height: 50px;display: flex;font-size: 22px;align-items: center;}
    .btnBox div{flex: 1;text-align: center;}
    .signature_img{height: 40px;width: 80px;border-style: dashed;  border-width: 1px;border-color: red;}
</style>

<div id="content-container" class="container" style="background-color: #8c8a8a;">
    <div class="showproduct" >
        <div class="logon-tab clearfix">  </div>
        <div class="login-main">
            <div class="cons">
            <div class="treary_box" id="myDiv">
                <div class="treary_item treary_name">
                  合同的标题
                </div>
                <div >
                   这里是合同的内容
                </div>
            </div>
            </div>
            <div class="popupBox">
                <div class="popup">
                    <div id="signature" class="signature" ></div>
                    <!--                    <canvas id="signName" width="500" height="250">-->
                    <!--                        您的浏览器当前不支持canvas画布,请更换别的浏览器进行签名操作-->
                    <!--                    </canvas>-->
                    <div class="btnBox">
                        <div id="createImage">确定</div>
                        <div id="clearCanvas">取消</div>
                    </div>
                </div>
            </div>
            <hr/>
            <div >
                {:token()}
                <input type="hidden" name="category_id" id="category_id" value="{$treaty_info.id}" />
                <input type="hidden" name="image" id="image" value="" />
                <div class="form-group">
                    <button class="btn btn-primary btn-lg btn-block btn-submit">{:__('提交')}</button>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="__ADDON__/js/index.js"></script>
<script>
    
    $(document).ready(function(){
    var innerDiv = document.querySelector("#myDiv");
    var innerHeight = innerDiv.offsetHeight;

    // 获取缩放比例并计算高度
    var transformValue = window.getComputedStyle(innerDiv).getPropertyValue("transform");
    var values = transformValue.split("(")[1].split(")")[0].split(",");
    var scaleX = values[0];
    var scaleY = values[3];
    var transformedHeight = innerHeight * scaleY;
    // 将父级DIV元素的高度设置为内部DIV元素的高度
    var container = document.querySelector(".cons");
    container.style.height = transformedHeight+100+ "px";
        var index = 0;
        var images = [];
        var tag_name = '';
        console.log("初始化",images);
        //初始化签名样式
        var arguments = {
            width: '400px',
            height: '250px',
            cssclass: 'signature',
            signatureLine: false,//去除默认画布上那条横线
            lineWidth: '5',
        };
        $("#signature").jSignature(arguments);


        //清除重写
        $('#clearCanvas').on('click',function(){
            $("#signature").jSignature("reset");
            //清除重写调用方式
            // $('#signName').clearSignature();
            $('.popupBox').css('display' , 'none')
        });
        //点击唤起签名
        $('.signClass' ).on('click', function(e) {
            tag_name = e.currentTarget.dataset.tag_name;//每个签名的标志
            index = $(this).index()
            $('.popupBox').css('display' , 'flex')
        })
        //确认按钮
        $('#createImage').on('click',function(){
            // console.log(tag_name)
            //标准格式但是base64会被tp框架过滤,所不校验,但是jSignature默认是使用png
            var datapair = $("#signature").jSignature("getData", "image");
            var i = new Image();
            i.src = "data:" + datapair[0] + "," + datapair[1];
            i.image = datapair[1];
            $.ajax({
                url: "/addons/treaty/index/upload",
                data: {'image_data':encodeURIComponent(i.src)},
                type: "post",
                success: function (res) {
                    if (res.code == 1) {
                        layer.msg(res.msg);
                        // console.log("tag_name",tag_name);
                        // console.log("开始",images);
                        var is_replace = 0;
                        $.each(images, function (index, item) {
                            if(item['name'] == tag_name){
                                images[index] = {name:tag_name,url:res.data.url};
                                is_replace = 1
                            }
                        })
                        if(!is_replace){
                            images.push({name:tag_name,url:res.data.url});
                        }
                        // console.log("结束",images);
                        $('#newImage').attr('src',res.data.url);
                        var className = ".sign_"+tag_name
                        $(className).html(' <img  class="signature_img" src="' +res.data.url  + '" />')
                        $("#signature").jSignature("reset");
                        $('.popupBox').css('display' , 'none')
                    } else {
                        layer.msg(res.msg);
                    }
                }
            });
        });



        $(".btn-submit").click(function () {
            var category_id = $("#category_id").val();
            var token = $("input[name='__token__']").val();
            $.ajax({
                url: "/addons/treaty/index/index",
                data: {__token__:token,images:images,category_id:category_id},
                type: "post",
                success: function (res) {
                    if (res.code == 1) {
                        layer.msg(res.msg);
                        setTimeout(function () {
                            window.location.href=res.url;
                        },1000)

                    } else {
                        $("input[name='__token__']").val(res.data.token)
                        layer.msg(res.msg);
                        return false;
                    }
                }
            })
        });


        $("img").click(function () {
            var src = $(this).attr("src");
            // layer.open({
            //     type: 1,
            //     title: false,
            //     closeBtn: 1,
            //     shadeClose: false,
            //     skin: 'img_box',
            //     content: '<img style="display: block;margin: 0 auto;max-width: 85%" src="'+$(this).attr("src")+'">'
            // });
        });
    });
</script>

第二版,第一版兼容性很差,补充一下后续兼容方案


<style>
:root {
  --scale-ratio: 0.37;
}
@media (min-width: 300px) and (max-width: 767px) {
  /* 此处为你要应用的 CSS 样式代码 */
     .treary_box{
       width: 900px;
        transform-origin: top left;
		transform: scale(var(--scale-ratio));
    }
    .cons{
      display: inline-block; /* 用于包裹所有元素,但不撑开.height */
      overflow: hidden;
}
}

.bot {
			background-color: #e5e2e2;
			font-family: Arial, sans-serif;
			line-height: 1.5;
		}
   
		.showproduct:before {
			content: "";
			display: block;
			position: absolute;
			top: -30px;
			left: -20px;
			width: 80px;
			height: 80px;
			background-color: #e5e2e2;
			transform: rotate(-45deg);
			z-index: -1;
			box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
		}
    .treary_name{font-size: 25px;text-align: center}
    .treary_content{margin-top: 5px}
    .treary_content img{max-width: 100%!important;}
    .form_tip{font-size: 20px;text-align: center;color: red}
    .my_form{margin-top: 15px}
    .signature_tip{text-align: center;font-weight: bold;font-size: 18px}
    .signature{background-color: #eeeeee;margin: 20px auto}
    .signature_but_box{margin: 20px;height: 25px;}
    .signature_but{height: 25px;width: 50%;float: left;}
    .img_box{max-width: 95%;display: block;margin: 0 auto}
    .n-default .msg-wrap{position: relative;}
    /*.login-section{min-height: 550px}*/
    .showproduct {
        	margin: 0 auto;
			padding: 50px;
			background-color: white;
			box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
			border-radius: 5px;
			position: relative;
    margin: 10px;
	font-size: 18px;
}
span.txt.flex1 {
    text-align: center;
}

.showproduct {
    background: #fff;
    font-family: 'Microsoft Yahei';
    padding: .25rem .3rem;
    position: relative;
        border-radius: 15px;
}

    .popupBox{background: rgba(0, 0, 0, 0.3);position: fixed;top: 0;bottom: 0;right: 0;left: 0;display: none;justify-content: center;align-items: center;}
    .popup{background: #fff;border-radius: 10px;overflow: hidden;}
    .btnBox{height: 50px;display: flex;font-size: 22px;align-items: center;}
    .btnBox div{flex: 1;text-align: center;}
    .signature_img{height: 60px;width: 100px;border-style: dashed;  border-width: 1px;border-color: red;}
</style>
<body>
    <div class="bot">
<div id="content-container" class="container" style="background-color: #e5e2e2;">
    <div class="showproduct" >
        <div class="logon-tab clearfix">  </div>
        <div class="login-main">
            <div class="cons">
            <div class="treary_box" id="myDiv">
                <div class="treary_item treary_name" style="margin-top: 35px">
                    {$treaty_info.name?:"没有名称"}
                </div>
                <div >
                    {$treaty_info.content?:"没有内容"}
                </div>
            </div>
            </div>
            <div class="popupBox">
                <div class="popup">
                    <div id="signature" class="signature" ></div>
                    <!--                    <canvas id="signName" width="500" height="250">-->
                    <!--                        您的浏览器当前不支持canvas画布,请更换别的浏览器进行签名操作-->
                    <!--                    </canvas>-->
                    <div class="btnBox">
                        <div id="createImage">确定</div>
                        <div id="clearCanvas">取消</div>
                    </div>
                </div>
            </div>
            <hr/>
            <div >
                {:token()}
                <input type="hidden" name="category_id" id="category_id" value="{$treaty_info.id}" />
                <input type="hidden" name="image" id="image" value="" />
                <div class="form-group">
                    <button class="btn btn-primary btn-lg btn-block btn-submit">{:__('提交')}</button>
                </div>
            </div>
        </div>
    </div>
</div>
</div>

<script src="__ADDON__/js/index.js"></script>
<script>
  function handleResize() {
    const widthRatio = $(window).width() / 1100;
    $('body').css('--scale-ratio', widthRatio);
    document.body.style.setProperty('--scale-ratio', widthRatio);
    var innerDiv = document.querySelector("#myDiv");
    var innerHeight = innerDiv.offsetHeight;
    
    // 获取缩放比例并计算高度
    var transformValue = window.getComputedStyle(innerDiv).getPropertyValue("transform");
    console.log(transformValue);
    if(transformValue=='none'){
        var transformedHeight = innerHeight;
    // 将父级DIV元素的高度设置为内部DIV元素的高度
        var container = document.querySelector(".cons");
        container.style.height = transformedHeight+ "px";
    }else{
        var values = transformValue.split("(")[1].split(")")[0].split(",");
        var scaleX = values[0];
        var scaleY = values[3];
        var transformedHeight = innerHeight * scaleY;
        // 将父级DIV元素的高度设置为内部DIV元素的高度
        var container = document.querySelector(".cons");
        container.style.height = transformedHeight+100+ "px"; 
    }
    
}
function debounce(callback, delay) {
  let timerId;
  return function() {
    const args = arguments;
    const context = this;
    clearTimeout(timerId);
    timerId = setTimeout(() => {
      callback.apply(context, args);
    }, delay);
  }
}
$(window).resize(debounce(handleResize,250));
    $(document).ready(function(){
      handleResize();
        var index = 0;
        var images = [];
        var tag_name = '';
        console.log("初始化",images);
        //初始化签名样式
        var arguments = {
            width: '800px',
            height: '250px',
            cssclass: 'signature',
            signatureLine: false,//去除默认画布上那条横线
            lineWidth: '5',
        };
        $("#signature").jSignature(arguments);


        //清除重写
        $('#clearCanvas').on('click',function(){
            $("#signature").jSignature("reset");
            //清除重写调用方式
            // $('#signName').clearSignature();
            $('.popupBox').css('display' , 'none')
        });
        //点击唤起签名
        $('.signClass' ).on('click', function(e) {
            tag_name = e.currentTarget.dataset.tag_name;//每个签名的标志
            index = $(this).index()
            $('.popupBox').css('display' , 'flex')
        })
        //确认按钮
        $('#createImage').on('click',function(){
            // console.log(tag_name)
            //标准格式但是base64会被tp框架过滤,所不校验,但是jSignature默认是使用png
            var datapair = $("#signature").jSignature("getData", "image");
            var i = new Image();
            i.src = "data:" + datapair[0] + "," + datapair[1];
            i.image = datapair[1];
            $.ajax({
                url: "/addons/treaty/index/upload",
                data: {'image_data':encodeURIComponent(i.src)},
                type: "post",
                success: function (res) {
                    if (res.code == 1) {
                        layer.msg(res.msg);
                        // console.log("tag_name",tag_name);
                        // console.log("开始",images);
                        var is_replace = 0;
                        $.each(images, function (index, item) {
                            if(item['name'] == tag_name){
                                images[index] = {name:tag_name,url:res.data.url};
                                is_replace = 1
                            }
                        })
                        if(!is_replace){
                            images.push({name:tag_name,url:res.data.url});
                        }
                        // console.log("结束",images);
                        $('#newImage').attr('src',res.data.url);
                        var className = ".sign_"+tag_name
                        $(className).html(' <img  class="signature_img" src="' +res.data.url  + '" />')
                        $("#signature").jSignature("reset");
                        $('.popupBox').css('display' , 'none')
                    } else {
                        layer.msg(res.msg);
                    }
                }
            });
        });



        $(".btn-submit").click(function () {
            var category_id = $("#category_id").val();
            var token = $("input[name='__token__']").val();
            $.ajax({
                url: "/addons/treaty/index/index",
                data: {__token__:token,images:images,category_id:category_id},
                type: "post",
                success: function (res) {
                    if (res.code == 1) {
                        layer.msg(res.msg);
                        setTimeout(function () {
                            window.location.href=res.url;
                        },1000)

                    } else {
                        $("input[name='__token__']").val(res.data.token)
                        layer.msg(res.msg);
                        return false;
                    }
                }
            })
        });


        $("img").click(function () {
            var src = $(this).attr("src");
            // layer.open({
            //     type: 1,
            //     title: false,
            //     closeBtn: 1,
            //     shadeClose: false,
            //     skin: 'img_box',
            //     content: '<img style="display: block;margin: 0 auto;max-width: 85%" src="'+$(this).attr("src")+'">'
            // });
        });
    });
</script>

 

转载请注明出处或者链接地址:https://www.qianduange.cn//article/5936.html
标签
评论
发布的文章

AJAX和JSON

2024-05-03 19:05:37

qml 文件中 JSON的使用

2024-05-03 19:05:03

json在线格式化代码

2024-05-03 19:05:01

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!