কিছু উপাদানগুলির জন্য নাগনিমেট অক্ষম করুন


96

আমি ngAnimate মডিউল ব্যবহার করছি, কিন্তু আমার ng-if, ng-show, ইত্যাদি, যে দ্বারা প্রভাবিত হয়, আমি কিছু নির্বাচিত উপাদানের জন্য লিভারেজ ngAnimate করতে চাই। পারফরম্যান্স এবং উপাদানগুলির মধ্যে কিছু বাগের জন্য যা খুব দ্রুত দেখায় এবং লুকায়।

ধন্যবাদ


4
সমস্যাটির কয়েকটি উদাহরণ কোড যুক্ত করুন।
চেকাইবাস্টার্ড

ইস্যুগুলির মধ্যে একটি হ'ল display:blockআপনার সমস্ত পুনরাবৃত্তকারীকে এনজিমেট বাহিনী :ng-hide-add-active, .ng-hide-remove { display: block!important; }
সোমটিক

আরও ভাল প্রশ্ন জিজ্ঞাসা করা হবে "সম্পূর্ণ অ্যানিমেশন লুপটি সম্পন্ন না করে লুকানো থাকা উপাদানগুলির জন্য এনজিএনেট কাজটি সঠিকভাবে করার জন্য আমি কীভাবে আমার সিএসএসের সংজ্ঞা দিতে পারি"। সেরা উত্তর নীচে ক্রিস বার থেকে from
এরিক

উত্তর:


53

এটি কেবল আপনার সিএসএসে যুক্ত করুন। এটি সর্বশেষ নিয়ম হলে সবচেয়ে ভাল:

.no-animate {
   -webkit-transition: none !important;
   transition: none !important;
}

তারপরে no-animateআপনি অক্ষম করতে চান এমন উপাদানটির শ্রেণিতে যুক্ত করুন । উদাহরণ:

<div class="no-animate"></div>

4
আপনি যদি সাস ব্যবহার করছেন তবে আপনার "ওয়েবেকিট-ট্রানজিশন: কোনোটাই গুরুত্বপূর্ণ নয়!"
মারওয়েন ট্রাবেলসি

15
দয়া করে মনে রাখবেন যে এই উত্তরটি ভুল কারণ এটি কেবল সমস্ত কৌণিক দ্বারা পরিচালিত নয়, সমস্ত অ্যানিমেশনগুলি অক্ষম করে।
স্ট্যাকুলার

4
আপনি কি এটা চেষ্টা করেছেন? আমাকে আপনার কোডের একটি নমুনা দেখতে দিন। এটি আমার এবং ছয় জনেরও বেশি ব্যক্তির পক্ষে কাজ করে যা এটি অনুমোদন করেছে
ডেভিড অ্যাডোটয়ে

4
আমি .no-animate, .no-animate-children *বাচ্চাদের,
কিমবল রবিনসন

4
@ ডেভিড অ্যাডোটোয়ে এই সমাধানটি কার্যকর হবে না যদি আপনার কোনও এনজি-শো হয় বা এনজি-থাকে যদি কোনও সংকেত সহ কোনও উপাদান থাকে .. মানে আমার .. যদি আমার কাছে কোনও লোডার স্পিনার থাকে যা কেবলমাত্র http অনুরোধের সময় প্রদর্শিত হয় এবং অনুরোধটি সমাধান হওয়ার পরে অদৃশ্য হয়ে যায় এই শ্রেণীর ফলস্বরূপ কোনও অ্যানিমেটিংয়ের ফলস্বরূপ না !, মাইকেল এর উত্তর ঠিক আছে, তবে প্রয়োগ করা খুব ক্লান্তিকর, এবং আপনার নিয়ামকদের সিএসএস নির্বাচকদের এড়ানোর চেষ্টা করা উচিত। দিকনির্দেশনা তৈরি করা ঠিক আছে, তবে ব্লসির উত্তরের দিকে তাকালে আপনি দেখতে পাবেন যে AngularJS টিম ইতিমধ্যে এই সমস্যার যত্ন নেওয়ার জন্য একটি নমনীয় উপায় সরবরাহ করেছে;)
এড্রিয়ান

106

আপনি যদি নির্দিষ্ট উপাদানগুলির জন্য অ্যানিমেশনগুলি সক্ষম করতে চান (নির্দিষ্ট উপাদানগুলির জন্য তাদের অক্ষম করার বিপরীতে) আপনি সঞ্চারিত করতে নির্দিষ্ট শ্রেণীর নাম (বা রেজেক্স) সহ উপাদানগুলি কনফিগার করতে $ অ্যানিমেটপ্রাইডারটি ব্যবহার করতে পারেন ।

নীচের কোডটি এমন angular-animateশ্রেণীর উপাদানগুলির জন্য অ্যানিমেশন সক্ষম করবে :

var myApp = angular.module("MyApp", ["ngAnimate"]);
myApp.config(function($animateProvider) {
  $animateProvider.classNameFilter(/angular-animate/);
})

এখানে angular-animateঅ্যানিমেশন সক্ষম করতে শ্রেণীর অন্তর্ভুক্ত উদাহরণস্বরূপ :

<div ng-init="items=[1,2,3,4,5,6,7,8,9]">
  <input placeholder="Filter with animations." ng-model="f" /> 
  <div class="my-repeat-animation angular-animate" ng-repeat="item in items | filter:f track by item" >
    {{item}}
  </div>
</div>

এই ব্লগ থেকে Plunker উদাহরণ ধার করা এবং সংশোধিত হয়েছে যেখানে কেবল প্রথম ফিল্টারটিতে অ্যানিমেশন রয়েছে ( angular-animateক্লাস থাকার কারণে )।

দয়া করে নোট করুন যে আমি angular-animateউদাহরণ হিসাবে ব্যবহার করছি এবং এটি .classNameFilterফাংশনটি ব্যবহার করে এটি সম্পূর্ণরূপে কনফিগারযোগ্য ।


5
আপনি আমার দিন বাঁচিয়েছেন। আপনাকে অনেক ধন্যবাদ
gustavohenke

এটি সর্বাধিক মার্জিত সমাধান কারণ এটি অ্যানিমেশনগুলির জন্য অপ্ট-ইন প্রয়োজন, এবং অ্যানিমেটেড উপাদানগুলি শ্রেণীর নাম দ্বারা অন্যদের থেকে স্পষ্টভাবে পৃথক করা হয়।
নিকোলা এম।

4
এটি গ্রহণযোগ্য সমাধান হওয়া উচিত। নিখুঁত কাজ করে এবং আমার দিন বাঁচায়!

9
ক্লাস /^(?:(?!ng-animate-disabled).)*$/দিয়ে অ্যানিমেশন নিষ্ক্রিয় করতে রিজেেক্স ব্যবহার করুন ng-animate-disabled
IcanDivideBy0

দুর্দান্ত সমাধান! আমার প্রতি পৃষ্ঠায় 20 টি সারি দিয়ে একটি পৃষ্ঠাযুক্ত টেবিল রয়েছে। পৃষ্ঠাগুলি স্যুইচ করার সময়ের তৃতীয়াংশটি ব্রাউজার দ্বারা অ্যানিমেশন সিএসএস ক্লাসগুলি ব্যবহার করা হয় যা এমনকি ব্যবহৃত হয় নি।
কেভিন

81

অ্যাঙ্গুলারজেএস-এ অ্যানিমেশনগুলি নিষ্ক্রিয় করতে পারেন এমন দুটি উপায় রয়েছে যদি আপনার মডিউলের উপর নির্ভরতা হিসাবে মডিউল এনজিনেট থাকে:

  1. বিশ্বব্যাপী $ অ্যানিমেট পরিষেবাটিতে অ্যানিমেশনটি অক্ষম বা সক্ষম করুন:

    $animate.enabled(false);
    
  2. নির্দিষ্ট উপাদানের জন্য অ্যানিমেশনগুলি অক্ষম করুন - এটি অবশ্যই সেই কৌণিকের জন্য উপাদান হতে হবে অ্যানিমেশনস্টেট সিএসএস ক্লাস যুক্ত করবে (যেমন এনজি-এন্টার, ...)!

    $animate.enabled(false, theElement);
    

কৌণিক 1.4 সংস্করণ হিসাবে আপনার যুক্তিগুলি বিপরীত করা উচিত:

$animate.enabled(theElement, false);

জন্য ডকুমেন্টেশন$animate


4
এটি প্রত্যাশার মতো নির্দিষ্ট উপাদানগুলিতে কাজ করে না। যদি আমি বিশ্বব্যাপী অ্যানিমেশনগুলি বন্ধ করি এবং তারপরে এটি একটি নির্দিষ্ট উপাদানগুলিতে সক্ষম করি তবে এটি কার্যকর হয় না।
কুশাগ্রা গুর

4
এই উত্তরটি সরানো বা সম্পাদনা করা উচিত এটি কৌনিকটির কোন সংস্করণে কাজ করে তা নির্দিষ্ট করতে। ১.২.১০ এর জন্য এটি নির্দিষ্ট কিছু উপাদানগুলির জন্য নির্বাচিতভাবে অ্যানিমেট সক্রিয় করার জন্য খুব স্পষ্টভাবে কাজ করে না, যা এএএএএফসিটি প্রশ্নের পুরো বক্তব্য।
ত্রিঞ্জাজ

বিকল্প 2 1.2.25 সংস্করণে কাজ করছে কিনা তা কি কেউ জানেন?
খোরওয়াত

4
কেবলমাত্র ডকুমেন্টেশন ( ডকস.অঙ্গুলারজস.আর.ই.পি.আই / জং / সার্ভিস / আনিমেট ) দেখে মনে হচ্ছে যে «এলিমেন্টটি সক্রিয় ফাংশনে পাস করা প্রথম প্যারামিটার।
ড্যানিয়েলএম

49

এনজি-অ্যানিমে নির্দিষ্ট উপাদানগুলির জন্য, সিএসএস বর্গ ব্যবহার করে, যা কৌণিক অ্যানিমেট দৃষ্টান্ত অনুসরণ করে, এনজি-অ্যানিমেটটি রেজিগ্স ব্যবহার করে শ্রেণি পরীক্ষা করতে আপনি কনফিগার করতে পারেন।

কনফিগার করুন

    var myApp = angular.module("MyApp", ["ngAnimate"]);
    myApp.config(function($animateProvider) {
        $animateProvider.classNameFilter(/^(?:(?!ng-animate-disabled).)*$/);
    })

ব্যবহার

ng-animate-disabledআপনি এনজি-অ্যানিমে উপেক্ষা করতে চান এমন কোনও উপাদানগুলিতে কেবল ক্লাস যুক্ত করুন ।


Credit


7
আমি মনে করি নাগরিক আচরণ ফিল্টার করার এটি সবচেয়ে সঠিক উপায়!
এডিরিয়ান

6
এই উত্তরের জন্য এটি স্ক্রোল করার মতো ছিল।
জোসেফ হারুশ

আমি নিশ্চিত করতে পারি যে অ্যাঙ্গুলারজেএসের সর্বশেষতম সংস্করণ সহ এটি অবশ্যই সমস্যার সেরা সমাধান।
অ্যাডাম রিইস

44

ধন্যবাদ, আমি একটি নির্দেশ লিখেছি যা আপনি উপাদানটিতে রাখতে পারেন

কফিস্ক্রিপ্ট:

myApp.directive "disableAnimate", ($animate) ->
  (scope, element) ->
    $animate.enabled(false, element)

জাভাস্ক্রিপ্ট:

myApp.directive("disableAnimate", function ($animate) {
    return function (scope, element) {
        $animate.enabled(false, element);
    };
});

এটি একটি নিফটি পদ্ধতির, এটি কীভাবে উপাদানটির অ্যাক্সেস করবেন তা সবসময় পরিষ্কার হয় না এবং অন্য কয়েকটি পদ্ধতির সাথে আমি ভীত হই যে আমি জাভাস্ক্রিপ্টের হার্ড-রেফারেন্সিংয়ের সাথে একটি বা একাধিক উপাদান একটি টেমপ্লেটে সংজ্ঞায়িত করে আমার কন্ট্রোলারদের আঁকড়ে ধরছি be । এটি উদ্বেগের একটি দুর্দান্ত বিচ্ছেদের মত অনুভব করে!
ম্যাটিগাবে

4
প্যারামিটার ক্রমটি $ animate.enabled এ বিপরীত হয়েছে, যদি কেউ ভাবছেন যে কেন এটি সমস্ত এনজি অ্যানিমেশন অক্ষম করে। আপনি যদি ব্যবহার করেন তবে $animate.enabled(element,false);
মনোমুগ্ধকর

ক্ষমা প্রার্থনা আমি দেখতে পাচ্ছি এটি কেবলমাত্র 1.4.x + এর ক্ষেত্রে প্রযোজ্য, উপরের কোডটি পূর্ববর্তী সংস্করণগুলির জন্য সঠিক।
gss

19

আমি খুঁজে পেয়েছি যে $animate.enabled(false, $element);এটি ব্যবহারকারী উপাদানগুলির জন্য কাজ করবে ng-showবা ng-hideতবে এটিng-if কোনও কারণে ব্যবহৃত উপাদানগুলির জন্য কাজ করবে না ! যে সমাধানটি আমি ব্যবহার করে শেষ করেছি তা হ'ল এটিই কেবল CSS এ করা, যা আমি গিটহাবের এই থ্রেড থেকে শিখেছি

সিএসএস

/* Use this for transitions */
.disable-animations.ng-enter,
.disable-animations.ng-leave,
.disable-animations.ng-animate {
  -webkit-transition: none !important;
  transition: none !important;
}

/* Use this for keyframe animations */
.disable-animations.ng-animate {
  -webkit-animation: none 0s;
  animation: none 0s;
}

এসসিএসএস

.disable-animations {
  // Use this for transitions
  &.ng-enter,
  &.ng-leave,
  &.ng-animate {
    -webkit-transition: none !important;
    transition: none !important;
  }
  // Use this for keyframe animations
  &.ng-animate {
    -webkit-animation: none 0s;
    animation: none 0s;
  }
}

আমার কেসটি ছিল যে এনজিএমিট লোডযুক্ত, একটি পূর্ণ অ্যানিমেশন লুপ শেষ না হওয়া অবধি। লোডিং.ইং-লুকের মতো শ্রেণি পর্দায় থাকবে। এটি সবচেয়ে পরিষ্কার উত্তর, কারণ এটি মূলত কেবলমাত্র এনজিএমিট করার জন্য সঠিক কনফিগারেশনটি খাওয়ানো হয় এবং এটি সাধারণত ব্যবহার করা হয়। এটি এটির ভুল কনফিগারেশন করা ভাল, তারপরে এটি অক্ষম করা। সুতরাং আপনার জন্য +1, আশা করি আমি এখানে স্কোরটি আরও বেশি দিতে পারতাম।
এরিক

এটি সবচেয়ে জটিল উত্তর। সিএসএস দিয়ে এটি করা জেএসের সাথে গোলযোগের চেয়ে আরও ভাল।
মানস

দয়া করে @ ব্লসির উত্তরটি দেখুন, এটির সাথে মোকাবিলা করার আরও সাধারণ এবং সঠিক উপায়
এড্রিয়ান

3

আমি আমার উপর এনজিএমিট ব্যবহার করতে চাই নাng-if , সুতরাং এটি আমার সমাধান হবে:

[ng-if] {
  .ng-enter, .ng-leave, .ng-animate {
    -webkit-transition: none !important;
    transition: none !important;
  }
}

এটি অন্য পরামর্শ হিসাবে পোস্ট করা!


2

আমার একটি তালিকা রয়েছে যা থেকে প্রথমটি liব্যবহার করে লুকানো আছে ng-hide="$first"। ব্যবহার ng-enterফলাফল liহচ্ছে অদৃশ্য সামনে অর্ধেক একটি দ্বিতীয় জন্য দেখানো।

ক্রিস বারের সমাধানের ভিত্তিতে, আমার কোডটি এখন এ জাতীয় দেখাচ্ছে:

এইচটিএমএল

<ol>
    <li ng-repeat="item in items"
        ng-hide="$first"
        ng-class="{'no-animate' : $first}">
    </li>
</ol>

সিএসএস

.no-animate.ng-enter,
.no-animate.ng-leave,
.no-animate.ng-animate {
        transition: none !important; /* disable transitions */
        animation: none 0s !important; /* disable keyframe animations */
}

li.ng-enter {
    opacity: 0;
    transition: opacity 0.3s ease-out;
}
li.ng-enter-active {
    opacity: 1;
}

/* I use Autoprefixer. If you don't, please include vendor prefixes. */

0

আমি জানি যে এটি একটি বিলম্বিত উত্তর, কিন্তু আমরা এখানে মেইনকন্ট্রোলার ব্যবহার করি:

// disable all animations
$animate.enabled(false);

তবে সমস্যাটি হ'ল আমরা যখন সমস্ত অ্যানিমেশন অক্ষম করি তখন ইউআই-সিলেক্ট কনফিগার করা হয় opacity: 0

সুতরাং, সিএসএস ব্যবহার করে ধাপে ধাপে 1 এ সেট করা প্রয়োজনীয়:

.ui-select-choices {
    opacity: 1 !important;
}

এটি সঠিকভাবে অস্বচ্ছতা সেট করবে এবং ইউআই-সিলেক্ট কাজ করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.