[已解决] vue.js 在IOS7、android 4.1 默认浏览器中使用动态组件,会子组件会同时执行并渲染。

发布于 2022-09-02 10:48:29 字数 3097 浏览 30 评论 0

vue.js 版本

v1.0.17

在ios7或android 4.1 ~ android 5.1 默认浏览器中使用动态组件,会使得子组件同时执行并渲染

在ios9、android 最新版QQ浏览器 、PC版的Chrome浏览器中并不会同时执行,正常运行

css代码:

<style type="text/css">

.box-a{
    position: absolute;
    z-index: 53;
    width: 100px;
    height: 100px;
    background: rgba(255,0,0,0.5);
}
.box-b{
    position: absolute;
    z-index: 53;
    width: 80px;
    height: 80px;
    background: rgba(0,0,0,0.5);
}

.move-animation
{
    -webkit-animation: move .3s ease;
            animation: move .3s ease;

            animation-fill-mode: forwards;
    -webkit-animation-fill-mode: forwards;
}

@keyframes move
{
    from
    {
        -webkit-transform: translate(0px,0);
                transform: translate(0px,0);
    }
    to
    {
        -webkit-transform: translate(100px,0);
                transform: translate(100px,0);
    }
}

@-webkit-keyframes move
{
    from
    {
        -webkit-transform: translate(0px,0);
                transform: translate(0px,0);
    }
    to
    {
        -webkit-transform: translate(100px,0);
                transform: translate(100px,0);
    }
}

</style>

模板:

<component  :is="isPage"  :Page.sync="isPage"></component>
<template id="component-a">
    <div class="main-screen">
        <div class="box-a" v-bind:class="[animation]"></div>
    </div>
</template>

<template id="component-b">
    <div class="main-screen1">
        <div class="box-b" v-bind:class="[animation]"></div>
    </div>
</template>

代码:

var A = Vue.extend({
    data:function(){
        return{
            animation:''
        }
    },
    template:'#component-a',
    props:['Page'],
    ready:function(){

        _self = this;
        setTimeout(function(){
            _self.animation = 'move-animation';
            _self.done();
        },2000);
        console.log('component-a ok');
                
    },
    methods:{
        done:function() {
            _self = this;
            setTimeout(function(){
                _self.Page = 'B'
            },1000);
        }
    }
});

var B = Vue.extend({
    data:function(){
        return{
            animation:''
        }
    },
    template:'#component-b',
    props:['Page'],
    ready:function(){
            
        _self = this;
        setTimeout(function(){
            _self.done();
        },2000);
        console.log('component-b ok');    
        },
    methods:{
        done:function(obj) {
            this.animation = 'move-animation';
        }
    }
});

    
var app = new Vue({
    el:'#app',
    data:function(){
        return {
            animation:'',
            isPage:''
        }
    },
    props:['isPage'],
    ready:function(){
        _self = this;
        setTimeout(function(){
            _self.animation = 'move-animation';
            _self.isPage = 'A'
        },800);
        
    },
    components:{
        'A':A,
        'B':B
    }
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

哎呦我呸! 2022-09-09 10:48:29

已找到问题所在,在没有用vue-cli 或Webpack 构建的项目中,直接在html或者javascript构建的

模板必须写成 :

<script type="x/template" id="component-a">
    <div class="main-screen">
        <div class="box-a" v-bind:class="[animation]"></div>
    </div>
</script>

<script type="x/template" id="component-b">
    <div class="main-screen1">
        <div class="box-b" v-bind:class="[animation]"></div>
    </div>
</script>

否则,移动版浏览器(如:android 4.1 ~ android 5.1 原生浏览器、IOS7 原生浏览器、微信浏览器等)会同时执行组件并渲染,而不会像PC版那样调用到再执行

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文