আমি কীভাবে ওয়েবকিটকে শৈলীর পরিবর্তনগুলি প্রচার করতে পুনরায় আঁকতে / পুনরায় রঙ করতে বাধ্য করতে পারি?


247

শৈলীর পরিবর্তনের জন্য আমার কাছে কিছু তুচ্ছ জাভাস্ক্রিপ্ট রয়েছে:

sel = document.getElementById('my_id');
sel.className = sel.className.replace(/item-[1-9]-selected/,'item-1-selected');
return false;

এটি এফএফ, অপেরা এবং আইই এর সর্বশেষতম সংস্করণগুলির সাথে দুর্দান্ত কাজ করে তবে ক্রোম এবং সাফারির সর্বশেষতম সংস্করণগুলিতে ব্যর্থ হয়।

এটি দুই বংশধরকে প্রভাবিত করে, যা ভাই-বোন হয়ে থাকে। প্রথম সহোদর আপডেট, কিন্তু দ্বিতীয় না। দ্বিতীয় উপাদানটির একটি শিশুতেও ফোকাস থাকে এবং <a> ট্যাগ থাকে যাতে একটি অনক্লিক বৈশিষ্ট্যে উপরের কোডটি থাকে ।

ক্রোম “বিকাশকারী সরঞ্জাম” উইন্ডোতে যদি আমি কোনও উপাদানটির কোনও বৈশিষ্ট্য (যেমন চেক বাছাই করা এবং চেক করি) ন্যাজ করি তবে দ্বিতীয় ভাইবোনটি সঠিক স্টাইলে আপডেট হয়।

সহজেই এবং প্রোগ্রামেমেটিকভাবে ওয়েবকিটকে সঠিক জিনিসটি করার জন্য কি কোনও কর্মসীমা আছে?


আমি মনে করি যে আমি আমার ক্যানভাস অ্যাপ্লিকেশনটিকে একটি ভিউতে মোড়ানোর সময় অ্যান্ড্রয়েড ৪.২.২ (স্যামসাং আই 9500) এ এই সমস্যাটি অনুভব করছি। হাস্যকর!
জোশ

3
কি- forces-layout.md খুব ভাল পঠন জায়গা
vsync

উত্তর:


312

আমি কিছু জটিল পরামর্শ এবং অনেকগুলি সাধারণ পরামর্শ পেয়েছি যা কার্যকর হয়নি, তবে ভাসিল ডিনকভের একটি মন্তব্যে একটি মন্তব্য পুনর্নির্মাণ / পুনর্নির্মাণকে জরিমানা করার সহজ সমাধান দিয়েছে যা ঠিক কাজ করে:

sel.style.display='none';
sel.offsetHeight; // no need to store this anywhere, the reference is enough
sel.style.display='';

যদি এটি "ব্লক" ব্যতীত অন্য শৈলীর জন্য কাজ করে তবে আমি অন্য কাউকে মন্তব্য করব।

ধন্যবাদ, ভাসিল!


32
আপনি চেষ্টা করতে পারেন ঝিকিমিকি এড়াতে 'inline-block', 'table'বা 'run-in'পরিবর্তে 'none', কিন্তু এই পার্শ্ব প্রতিক্রিয়া হতে পারে। এছাড়াও, 0 এর একটি সময়সীমা জিজ্ঞাসাবাদ করার মতোই একটি offsetHeightsel.style.display = 'run-in'; setTimeout(function () { sel.style.display = 'block'; }, 0);
প্রতিবিম্বকে

15
এই উত্তরটি 2 বছর পরে এখনও কার্যকর। আমি এটি কেবলমাত্র একটি ক্রোম-ইস্যু ঠিক করার জন্য ব্যবহার করেছি যেখানে নির্দিষ্ট উপায়ে ব্রাউজারকে পুনরায় আকার দেওয়ার পরে সিএসএস বক্সের ছায়া পর্দায় থেকে যায়। ধন্যবাদ!
rkulla

5
@ এডান্টন আপনি ২০১০ সালে উত্তর দিয়েছেন It's এটি ২০১৩ এবং বাগটি এখনও রয়েছে। ধন্যবাদ। যাইহোক, কেউ কি জানেন যে ওয়েবকিট ট্র্যাকারে নিবন্ধিত কোনও সমস্যা আছে কিনা?
রাফেলডিডিএল

13
পিএস .: আমার জন্য উপরের সমাধানটি আর কাজ করে না। পরিবর্তে আমি এটি (jQuery) ব্যবহার করেছি: বিক্রয় hide ()। প্রদর্শন (0); সূত্র: স্ট্যাকওভারফ্লো.com
সমস্যাগুলি

7
আপনাকে যা করতে হবে তা হ'ল একটি আকারের সম্পত্তি পড়ুন, আপনাকে এটিকে পিছনে পিছনে বদলাতে হবে না।
অ্যান্ড্রু বুলক

93

আমরা সম্প্রতি এটির মুখোমুখি হয়েছি এবং আবিষ্কার করেছি যে সিএসএসে অনুবাদ জেডের সাথে সংক্রামিত স্তরে প্রভাবিত উপাদানটিকে প্রচার করা অতিরিক্ত জাভাস্ক্রিপ্টের প্রয়োজন ছাড়াই সমস্যাটি স্থির করেছে।

.willnotrender { 
   transform: translateZ(0); 
}

এই চিত্রকলার সমস্যাগুলি বেশিরভাগ ওয়েবকিট / ব্লিঙ্কে প্রদর্শিত হয় এবং এই ফিক্সটি বেশিরভাগ ক্ষেত্রে ওয়েবকিট / ব্লিঙ্ককে লক্ষ্য করে, এটি কিছু ক্ষেত্রে এটি পছন্দনীয়। বিশেষত যেহেতু গৃহীত উত্তরগুলি অবশ্যই একটি পুনরায় রঙের জন্য নয় , প্রায়শই রিফ্লো এবং পুনরায় রঙের কারণ করে ।

ওয়েবকিট এবং ব্লিঙ্কগুলি রেন্ডারিং পারফরম্যান্সে কঠোর পরিশ্রম করে চলেছে, এবং এই ধরণের বিভ্রান্তি অপ্টিমাইজেশনের দুর্ভাগ্যজনক পার্শ্ব প্রতিক্রিয়া যা অপ্রয়োজনীয় প্রবাহ এবং রঙগুলি হ্রাস করার লক্ষ্যে কাজ করে। সিএসএস-পরিবর্তন হবে বা অন্য একটি সফল স্পেসিফিকেশন হ'ল ভবিষ্যতের সমাধান, সম্ভবত solution

একটি যৌগিক স্তর অর্জনের অন্যান্য উপায় রয়েছে তবে এটি সর্বাধিক সাধারণ।


1
কৌণিক-ক্যারোসেল ব্যবহার করার সময় আমার জন্য কাজ করেছেন !
গুস্তাভোহেঙ্কে

1
আমার ইস্যুটি স্থির করে যেখানে স্লাইডিং প্যানেলের অভ্যন্তরে কোনও সীমানা ব্যাসার্ধ হারিয়েছিল
টিমো

1
কর্ডোভা প্রকল্পের জন্য কাজ করে!
কুইস্পি

1
রিফ্রেশ না হওয়া এমন ওয়েবেকিট-লাইন-ক্ল্যাম্পের জন্য আমার জন্য কাজ করেছেন
অ্যাডাম মার্শাল

1
ওয়েবেকিট-ট্রান্সফর্ম সহ আইপ্যাডে (6.0) আমার জন্য কাজ করেছেন: অনুবাদ করুন (-50%, -50%)।
লাইন

51

ড্যানর্টন সলিউশন আমার পক্ষে কাজ করে নি। আমার কিছু সত্যই অদ্ভুত সমস্যা ছিল যেখানে ওয়েবকিট কিছু উপাদান আঁকবে না; যেখানে ইনপুটগুলিতে অন্বলুর পর্যন্ত পাঠ্য আপডেট করা হয়নি; এবং ক্লাসনেম পরিবর্তন করার ফলে পুনরায় চিত্র আঁকা যাবে না।

আমার সমাধান, আমি দুর্ঘটনাক্রমে আবিষ্কার করেছিলাম, স্ক্রিপ্টের পরে শরীরে খালি শৈলীর উপাদান যুক্ত করা।

<body>
...
<script>doSomethingThatWebkitWillMessUp();</script>
<style></style>
...

এটা এটি স্থির। এ কেমন অদ্ভুত? আশা করি এটি কারও জন্য সহায়ক।


3
আমি পারলে ১,০০,০০০ বার উত্সাহ দিতাম। আমি বোকা ডিভিউটি প্রায় চারদিকে টেনে নিয়ে যাওয়ার জন্য পুনরায় রঙ করার জন্য ক্রোম পেতে পারি। যাইহোক, আপনাকে কোনও শৈলী উপাদান যুক্ত করতে হবে না (কমপক্ষে আমি করিনি) কোনও উপাদান কাজ করবে। আমি একটি ডিভি তৈরি করে এটিকে একটি আইডি দিয়েছিলাম যাতে আমি মুছে ফেলতে পারি এবং তারপরে প্রতিটি পদক্ষেপে উপাদানটি যুক্ত করতে পারি, যাতে ডিওএমকে অকেজো ট্যাগ দিয়ে না ভরে যায়।
হোবারউইকি

6
অন্য উত্তরে পুম্বা ৮০ এর মন্তব্যের সাথে এটি কেবল মিশ্র ব্যবহার করা হয়েছে। আমি যে var div = $('<div>').appendTo(element); setTimeout(function(){ div.remove(); }, 0);
ফিক্সটিটি

33
এই একক লাইনটি আমার পক্ষে দুর্দান্ত কাজ করছে! $('<style></style>').appendTo($(document.body)).remove();
pdelanauze

1
@pdelanauze উত্তর নিখুঁত কাজ করে। আমার সিএসএস 3 অনুবাদ এবং আইওএস-এ রূপান্তরকরণের পুনরায় চিত্রের সমস্যা রয়েছে।
মার্সেল ফ্যালিয়ের

11
কেবল জেনে রাখুন যে এটি পুরো পৃষ্ঠাটির পুনরায় রঙ করতে বাধ্য করে, যদিও বেশিরভাগ সময় আপনি কেবলমাত্র পৃষ্ঠার একটি নির্দিষ্ট অংশটি পুনরায় রঙ করতে চান ...
রায়ান হুইল

33

যেহেতু ডিসপ্লে + অফসেট ট্রিগারটি আমার পক্ষে কাজ করে নি, আমি এখানে একটি সমাধান পেয়েছি:

http://mir.aculo.us/2009/09/25/force-redraw-dom-technique-for-webkit-based-browsers/

অর্থাত

element.style.webkitTransform = 'scale(1)';

3
আমি এটি চেষ্টা করছি এমন হ্যাকটিতে ব্যবহার করেছি, তবে পরিবর্তে scale(1), আমি এটিকে নিজের কাছে নির্ধারিত করেছি element.style.webkitTransform = element.style.webkitTransform। প্রাক্তনটির সাথে এটি নির্ধারণের কারণটি absoluteল্য অবস্থানযুক্ত উপাদানগুলির জন্য পৃষ্ঠাটিকে কিছুটা বিকৃত করা হয়েছিল !
বিপ্রতিক

এটি আমার পক্ষে কাজ করেছিল এবং displayসমাধানের মতো যে স্ক্রোল অবস্থানটি ছিল তাতে ঝাঁকুনি বা পুনরায় সেট করতে সমস্যা হয়নি।
ডেভিডটবার্নাল

আমার প্রচুর গতিশীল এসভিজি ব্যবহার করে কর্ডোভা অ্যাপ্লিকেশন ছিল। আইওএস 7 ব্যতীত সর্বত্র সূক্ষ্মভাবে কাজ করেছে, যেখানে শুরুতে এসভিজি উপাদানগুলি প্রদর্শন করা হয় না। একটি সাধারণ Added ('দেহ') যোগ করেছেন [0] .style.webkitTransform = 'স্কেল (1)'; আরম্ভের কোডটিতে সমস্যাটি অদৃশ্য হয়ে গেল!
হার্ক

এটি এখনকার মতো, নতুন সাফারি এবং আইওএসে কাজ করছে না।
31:48 18

@ Setholopolus কোন ভার্সন (গুলি) তা হবে?
এরিকজি

23

আমি একই সমস্যা ভুগছিলাম। ড্যানর্টনের 'টগলিং ডিসপ্লে' ফিক্সটি আমার অ্যানিমেশনের স্টেপ ফাংশনে যুক্ত হওয়ার পরে আমার পক্ষে কাজ করেছিল তবে আমি অভিনয় সম্পর্কে উদ্বিগ্ন ছিলাম এবং আমি অন্যান্য বিকল্পগুলির সন্ধান করছিলাম।

আমার পরিস্থিতিতে যে উপাদানটি পুনরায় রঙ করা হয়নি তা ছিল একেবারে অবস্থানের উপাদানগুলির মধ্যে যা সেই সময়ে জেড-সূচক ছিল না। এই উপাদানটিতে একটি জেড-ইনডেক্স যুক্ত করা Chrome এর আচরণ পরিবর্তন করে এবং প্রত্যাশা অনুযায়ী পুনরায় রঙগুলি ঘটে -> অ্যানিমেশনগুলি মসৃণ হয়ে ওঠে।

আমি সন্দেহ করি যে এটি একটি মহামারী, আমি ধারণা করি এটি নির্ভর করে যে ক্রোম কেন উপাদান পুনরায় আঁকতে বেছে নিচ্ছে না তবে কারও আশা আশা করে এই সুনির্দিষ্ট সমাধানটি এখানে পোস্ট করছি।

চিয়ার্স, রব

tl; dr >> উপাদান বা এর পিতামাতার সাথে একটি জেড-সূচক যুক্ত করার চেষ্টা করুন।


8
উজ্জ্বল। এটি দুর্দান্ত এবং আমার জন্য সমস্যাটি স্থির করেছে। A +++ আবার জেড-ইনডেক্স করবে।
trisweb

আমার পরিস্থিতিতে স্ক্রোল-বার এবং রূপান্তরগুলি নিয়ে কাজ করে নি।
রিকি বয়েস

16

নিম্নলিখিত কাজ করে। এটি কেবল খাঁটি সিএসএসে একবার সেট করতে হবে। এবং এটি জেএস ফাংশনের চেয়ে বেশি নির্ভরযোগ্যভাবে কাজ করে। অভিনয় অকার্যকর বলে মনে হচ্ছে।

@-webkit-keyframes androidBugfix {from { padding: 0; } to { padding: 0; }}
body { -webkit-animation: androidBugfix infinite 1s; }

দেখে মনে হচ্ছে এটি আমার জন্যও কাজ করছে। মোবাইল সাফারি
ক্রিস

এটি আমার সমস্যার সমাধান করে, সাফারিটিকে রিলেআউট করতে বাধ্য করে। তবে আমি zoomপ্যাডিংয়ের পরিবর্তে ব্যবহার করেছি :@-webkit-keyframes safariBugFix {from { zoom: 100%; } to { zoom: 99.99999%; }}
আহমেদ মুসাল্লাম

13

কোনও কারণে ড্যান্টর্টনের কাজের কাজের উত্তর আমি পাইনি, আমি কী দেখতে পাচ্ছিলাম তা দেখতে পাচ্ছিলাম তাই আমি এটিকে কিছুটা টুইট করেছিলাম:

$('#foo').css('display', 'none').height();
$('#foo').css('display', 'block');

এবং এটা আমার জন্য কাজ করে।


7
আমি এর উপরে সমস্ত কিছু চেষ্টা করেছিলাম, তবে কেবলমাত্র এটিই আমার পক্ষে কাজ করেছিল। ডাব্লুটিএফের ওয়েবকিট! এটি কম্পিউটার বিজ্ঞান নয়! এই তো কালো যাদু!
চার্লি মার্টিন

7

আমি এখানে এসেছি কারণ ক্রোমের সিএসএস পরিবর্তনের পরে আমার স্ক্রোলবারগুলি পুনরায় আঁকার দরকার ছিল।

কারও যদি একই সমস্যা হয় তবে আমি এই ফাংশনটি কল করে এটি সমাধান করেছি:

//Hack to force scroll redraw
function scrollReDraw() {
    $('body').css('overflow', 'hidden').height();
    $('body').css('overflow', 'auto');
}

এই পদ্ধতিটি সর্বোত্তম সমাধান নয়, তবে এটি সমস্ত কিছু নিয়ে কাজ করতে পারে, উপাদানটি পুনরায় আঁকতে হবে এবং লুকিয়ে থাকা প্রতিটি সমস্যার সমাধান করতে পারে এমন উপাদানগুলি লুকিয়ে রেখে দেখায়।

আমি এখানে এটি ব্যবহার করেছি এমন ফ্রিডল : http://jsfiddle.net/promatik/wZwJz/18/


1
গ্রেট! আমি স্ক্রোলবারগুলিও প্রাণবন্ত করার চেষ্টা করছিলাম এবং এটিই আমার প্রয়োজন! বিটিডব্লিউ আরও ভাল ব্যবহার ওভারফ্লো: অ্যানিমেটেড স্ক্রোলবারগুলির জন্য ওভারলে
একলচেভ

6

আমি আজ হোঁচট খেয়েছি : প্রোটোটাইপ.জেএস এর জন্য এলিমেন্ট.আরড্র ()

ব্যবহার:

Element.addMethods({
  redraw: function(element){
    element = $(element);
    var n = document.createTextNode(' ');
    element.appendChild(n);
    (function(){n.parentNode.removeChild(n)}).defer();
    return element;
  }
});

যাইহোক, আমি মাঝে মাঝে লক্ষ্য করেছি যে আপনাকে অবশ্যই সমস্যাযুক্ত উপাদানটিতে পুনরায় ছবি আঁকুন () করতে হবে। কখনও কখনও পিতামাত্ত্বিক উপাদান পুনরায় অঙ্কন করলে শিশু যে সমস্যার সম্মুখীন হচ্ছে তা সমাধান করবে না।

ব্রাউজারগুলি যেভাবে উপাদানগুলি রেন্ডার করে সে সম্পর্কে ভাল নিবন্ধ: রেন্ডারিং: পুনরায় রঙ করা, রিফ্লো / রিলেআউট, রিস্টাইল


1
appendChildএকটি ডিওএম পদ্ধতি, কোনও জিকুয়ের পদ্ধতি নয়।
ChrisW

4

আমার এআই সংখ্যা সংখ্যক ডিভের সাথে এই সমস্যাটি ছিল যা দিয়ে অন্য ডিভের সাথে position: absolute.োকানো হয়েছিল, div োকানো ডিভগুলির কোনও অবস্থানের বৈশিষ্ট্য ছিল না। যখন আমি এটিতে position:relativeএটি পরিবর্তন করেছি ঠিকঠাক কাজ করেছে। (সমস্যাটি চিহ্নিত করা সত্যিই কঠিন ছিল)

আমার ক্ষেত্রে যে উপাদানগুলি কৌনিক দ্বারা সন্নিবেশ করা হয়েছে ng-repeat


1
ধন্যবাদ! এটি আমার ইস্যুটির জন্যও কাজ করেছে এবং এটি অনেক বেশি হালকা ওজন যা উপরের জাভাস্ক্রিপ্টের সমাধানগুলিতে।
Dsyko

4

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

আমি একটি pointer-events: noneস্থিতিশীল অবস্থান তৈরি করে শেষ করেছি, সেই উপাদানটির সাথে ডানর্টনের জবাবটি পূর্ণ আকারের সাথে প্রয়োগ করছি এবং এটি ডিওএমের সাথে হস্তক্ষেপ না করে পুরো পর্দায় একটি পুনরায় চিত্র আঁকতে বাধ্য করবে বলে মনে হচ্ছে।

এইচটিএমএল:

<div id="redraw-fix"></div>

সিএসএস:

div#redraw-fix {
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 25;
    pointer-events: none;
    display: block;
}

জাতীয়:

sel = document.getElementById('redraw-fix');
sel.style.display='none';
sel.offsetHeight; // no need to store this anywhere, the reference is enough
sel.style.display='block';

আপনার কাজের জন্য আমি আপনাকে যথেষ্ট ধন্যবাদ জানাতে পারি না যা কেবল আমার জন্য কাজ করেছিল। হ্যাঁ, এটি 2017 এবং ইস্যুটি চালু রয়েছে। আমার সমস্যাটি আরটিএল ভাষার পৃষ্ঠার সাথে সম্পর্কিত ছিল যা অ্যান্ড্রয়েড মোবাইল ডিভাইসগুলিতে ম্যানুয়ালি রিফ্রেশ করলে ফাঁকা রেন্ডার হবে। z-indexএবং pointer-eventsনিয়ম এখানে অতিরিক্ত হয়।
আমিন মোজাফারি

আমি ড্যানোর্টনের ফিক্সটি আগে ব্যবহার করেছি তবে সত্যই কারও কাছে প্রদর্শন না করা থেকে সামগ্রীর ফ্ল্যাশ নিয়ে লড়াই করছি। আপনার সমাধানটি আমার জন্য কোনও কন্টেন্ট ফ্ল্যাশ ছাড়াই দুর্দান্ত কাজ করেছে!
জাস্টিন নোয়েল

3

এই প্রশ্নের আর একটি উত্তর দরকার নেই তা নয়, তবে আমি কেবলমাত্র একক দ্বারা রঙ পরিবর্তন করে আমার বিশেষ পরিস্থিতিতে পুনর্নির্মাণকে বাধ্য করেছিলাম।

//Assuming black is the starting color, we tweak it by a single bit
elem.style.color = '#000001';

//Change back to black
setTimeout(function() {
    elem.style.color = '#000000';
}, 0);

setTimeoutবর্তমান ঘটনা লুপ বাইরে দ্বিতীয় শৈলী পরিবর্তন সরাতে সমালোচনামূলক প্রমাণিত হয়।


1
0 এর টাইমআউট সেট করা আমার পক্ষে অন্যরকম তবে অনুরূপ পরিস্থিতিতে কার্যকর প্রমাণিত হয়েছিল। একটি বৃহত ফর্মটি বিশ্লেষণ করার সময় jquery নিরবচ্ছিন্ন বৈধতা স্ক্রিনটিকে হিমায়িত করার আগে পুনরায় চিত্র আঁকা হয়নি। ভেবেছিলাম কেউ যদি একই পরিস্থিতিতে থাকে তবে আমি মন্তব্য করব। অন্যান্য সমাধানগুলি এই দৃশ্যে কাজ করেনি।
29

2

আমার জন্য একমাত্র সমাধানটি সোয়াএস্রেড ২০১২ এর উত্তরের অনুরূপ:

$('body').css('display', 'table').height();
$('body').css('display', 'block');

পৃষ্ঠায় আমার অনেক সমস্যা রয়েছে, তাই আমি displayমূল উপাদানটির সম্পত্তি পরিবর্তন করি । এবং এর display: table;পরিবর্তে আমি ব্যবহার করি display: none;কারণ noneস্ক্রোলিং অফসেটটি পুনরায় সেট করবে।


2

আমি transform: translateZ(0);পদ্ধতিটি ব্যবহার করি তবে কিছু ক্ষেত্রে এটি পর্যাপ্ত নয়।

আমি কোনও ক্লাস যুক্ত এবং মুছে ফেলার ভক্ত নই তাই আমি এটি সমাধানের উপায় খুঁজতে চেষ্টা করেছি এবং একটি নতুন হ্যাক শেষ হয়েছে যা ভালভাবে কাজ করে:

@keyframes redraw{
    0% {opacity: 1;}
    100% {opacity: .99;}
}

// ios redraw fix
animation: redraw 1s linear infinite;

1

যেহেতু প্রত্যেকের নিজের সমস্যা এবং সমাধান রয়েছে বলে মনে হচ্ছে, তাই আমি বুঝতে পেরেছিলাম যে আমি এমন কিছু যুক্ত করব যা আমার পক্ষে কাজ করে। অ্যান্ড্রয়েড ৪.১ এ বর্তমান ক্রোমের সাহায্যে ওভারফ্লো দিয়ে ডিভের চারপাশে একটি ক্যানভাস টেনে আনার চেষ্টা করা হয়েছে: লুকানো, আমি প্যারেন্ট ডিভের সাথে কোনও উপাদান যুক্ত না করলে আমি পুনরায় ছবি আঁকতে পারি না (যেখানে এটি কোনও ক্ষতি করে না)।

var parelt = document.getElementById("parentid");
var remElt = document.getElementById("removeMe");
var addElt = document.createElement("div");
addElt.innerHTML = " "; // Won't work if empty
addElt.id="removeMe";
if (remElt) {
    parelt.replaceChild(addElt, remElt);
} else {
    parelt.appendChild(addElt);
}

কোনও স্ক্রীন ফ্লিকার বা বাস্তব আপডেট নেই এবং নিজের পরে পরিষ্কার করছি। কোনও স্থানীয় বা শ্রেণীর স্কোপযুক্ত ভেরিয়েবল নেই, কেবল স্থানীয়। মোবাইল সাফারি / আইপ্যাড বা ডেস্কটপ ব্রাউজারগুলিতে কোনও কিছুর ক্ষতি হচ্ছে বলে মনে হয় না।


1

আমি absoluteআইওএস এইচটিএমএল 5 অ্যাপে কাজ করছি, আমি যখন আইওএস ডিভাইসগুলিতে উপরে বা নিচে স্ক্রোল করি তখন আমি কিছু পর্দার উপর অবস্থানিক উপাদান রেখে থাকি (আইফোন 4,5,6, 6+) আমি বাগটি পুনরায় রঙ করতে পারি।

অনেকগুলি সমাধানের চেষ্টা করা হয়েছে তবে এগুলির ব্যতীত কেউই আমার সমস্যা সমাধানের জন্য কাজ করছে না।

আমি .fixRepaintসেই নিখুঁত অবস্থানের উপাদানগুলিতে CSS ক্লাস ব্যবহার করেছি

.fixRepaint{
    transform: translateZ(0);
}

এটি আমার সমস্যাটিকে স্থির করেছে, এটি কারওর সাহায্যে হতে পারে


1
আমি কীভাবে এটি দেখিনি তা সম্পর্কে কিছুটা ওপস করুন। @ আরও জিজ্ঞাসা করার জন্য ধন্যবাদ
আনজুম ....

0

এটি জেএসের পক্ষে ঠিক আছে

sel.style.display='none';
sel.offsetHeight; // no need to store this anywhere, the reference is enough
sel.style.display='block';

তবে জ্যাকুরিতে, এবং বিশেষত যখন আপনি কেবল $ (ডকুমেন্ট) ব্যবহার করতে পারেন ready প্রস্তুত এবং কোনও নির্দিষ্ট কারণে কোনও অবজেক্টের। লোড ইভেন্টের সাথে আবদ্ধ করতে পারবেন না, নিম্নলিখিতগুলি কাজ করবে।

আপনাকে অবজেক্টস / ডিভিএসের আউটার (মোস্ট) ধারকটি পেতে হবে এবং তার এর সমস্ত বিষয়বস্তুকে ভেরিয়েবলের মধ্যে সরিয়ে ফেলতে হবে, তারপরে এটি পুনরায় যুক্ত করুন। এটি বাহ্যিক ধারকগুলির মধ্যে করা সমস্ত পরিবর্তনকে দৃশ্যমান করে তুলবে।

$(document).ready(function(){
    applyStyling(object);
    var node = $("div#body div.centerContainer form div.centerHorizontal").parent().parent();
    var content = node.html();
    node.html("");
    node.html(content);
}

0

আমি এই পদ্ধতিটি স্থানান্তরের সাথে কাজ করার সময় দরকারী হিসাবে খুঁজে পেয়েছি

$element[0].style.display = 'table'; 
$element[0].offsetWidth; // force reflow
$element.one($.support.transition.end, function () { 
    $element[0].style.display = 'block'; 
});

0

"ডিসপ্লে / অফসেটহাইট" হ্যাকটি আমার ক্ষেত্রে কার্যকর হয়নি, কমপক্ষে যখন এটি অ্যানিমেটেড উপাদানটিতে প্রয়োগ করা হয়েছিল।

আমার একটি ড্রপডাউন মেনু ছিল যা পৃষ্ঠার সামগ্রীর উপরে খোলা / বন্ধ ছিল। মেনুটি বন্ধ হয়ে যাওয়ার পরে নিবন্ধটি পৃষ্ঠা সামগ্রীতে রেখে দেওয়া হয়েছিল (কেবলমাত্র ওয়েবকিট ব্রাউজারগুলিতে)। "ডিসপ্লে / অফসেটহাইট" হ্যাকটি কেবলমাত্র কাজ করেছে যদি আমি এটি শরীরে প্রয়োগ করি, যা খারাপ লাগে।

তবে, আমি আরও একটি সমাধান খুঁজে পেয়েছি:

  1. উপাদানটি অ্যানিমেটিং শুরু করার আগে, "-webkit- ব্যাকফেস-দৃশ্যমানতা: আড়াল;" সংজ্ঞায়িত একটি শ্রেণি যুক্ত করুন উপাদানটির উপর (আপনি ইনলাইন স্টাইলটিও ব্যবহার করতে পারেন, আমি অনুমান করব)
  2. এটি অ্যানিমেটেটিং হয়ে গেলে, ক্লাসটি (বা স্টাইল) সরিয়ে ফেলুন

এটি এখনও বেশ হ্যাকি (এটি হার্ডওয়্যার রেন্ডারিংয়ে জোর করার জন্য একটি CSS3 সম্পত্তি ব্যবহার করে) তবে কমপক্ষে এটি কেবলমাত্র প্রশ্নের উপাদানকেই প্রভাবিত করে এবং আমার জন্য পিসি এবং ম্যাকের সাফারি এবং ক্রোম উভয় ক্ষেত্রেই কাজ করেছিল।


0

এটি এর সাথে সম্পর্কিত বলে মনে হচ্ছে : সাফারিতে jQuery স্টাইল প্রয়োগ করা হচ্ছে না

প্রথম প্রতিক্রিয়াতে প্রস্তাবিত সমাধানটি এই পরিস্থিতিতে আমাদের জন্য ভাল কাজ করেছে, যথা: স্টাইল পরিবর্তন করার পরে শরীরে একটি ডামি ক্লাস প্রয়োগ এবং সরিয়ে ফেলুন:

$('body').addClass('dummyclass').removeClass('dummyclass');

এটি সাফারিকে পুনরায় আঁকতে বাধ্য করে।


এটি ক্রোমে কাজ করতে আমাকে যুক্ত করতে হয়েছিল: $ ('বডি') addডক্লাস ('ডামাইক্লাস')। দেরি (0)। রেমোভ ক্লাস ('ডমিচ্লাস');
এমবোকিল

0

উপরের পরামর্শগুলি আমার পক্ষে কার্যকর হয়নি। কিন্তু নীচের একটি করে।

অ্যাঙ্কারের ভিতরে লেখাটি পরিবর্তনশীলভাবে পরিবর্তন করতে চান। শব্দ "অনুসন্ধান"। একটি আইডি বৈশিষ্ট্য সহ একটি অভ্যন্তরীণ ট্যাগ "ফন্ট" তৈরি করেছে। জাভাস্ক্রিপ্ট ব্যবহার করে সামগ্রীগুলি পরিচালনা করা (নীচে)

অনুসন্ধান করুন

স্ক্রিপ্ট সামগ্রী:

    var searchText = "Search";
    var editSearchText = "Edit Search";
    var currentSearchText = searchText;

    function doSearch() {
        if (currentSearchText == searchText) {
            $('#pSearch').panel('close');
            currentSearchText = editSearchText;
        } else if (currentSearchText == editSearchText) {
            $('#pSearch').panel('open');
            currentSearchText = searchText;
        }
        $('#searchtxt').text(currentSearchText);
    }

0

নির্দিষ্ট পরিস্থিতিতে যখন ওরিয়েন্টেশনটি পরিবর্তন করা হয়েছিল তখন আমার একটি এসভিজি নিয়ে একটি সমস্যা ছিল যা অ্যান্ড্রয়েডের জন্য ক্রোমে অদৃশ্য হয়ে গিয়েছিল। নীচের কোডটি এটি পুনরুত্পাদন করে না, তবে এটি আমাদের ছিল সেটআপ।

body {
  font-family: tahoma, sans-serif;
  font-size: 12px;
  margin: 10px;
}
article {
  display: flex;
}
aside {
  flex: 0 1 10px;
  margin-right: 10px;
  min-width: 10px;
  position: relative;
}
svg {
  bottom: 0;
  left: 0;
  position: absolute;
  right: 0;
  top: 0;
}
.backgroundStop1 {
  stop-color: #5bb79e;
}
.backgroundStop2 {
  stop-color: #ddcb3f;
}
.backgroundStop3 {
  stop-color: #cf6b19;
}
<article>
  <aside>
    <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="100%" width="100%">
      <defs>
        <linearGradient id="IndicatorColourPattern" x1="0" x2="0" y1="0" y2="1">
          <stop class="backgroundStop1" offset="0%"></stop>
          <stop class="backgroundStop2" offset="50%"></stop>
          <stop class="backgroundStop3" offset="100%"></stop>
        </linearGradient>
      </defs>
      <rect x="0" y="0" rx="5" ry="5" width="100%" height="100%" fill="url(#IndicatorColourPattern)"></rect>
    </svg>
  </aside>
  <section>
    <p>Donec et eros nibh. Nullam porta, elit ut sagittis pulvinar, lacus augue lobortis mauris, sed sollicitudin elit orci non massa. Proin condimentum in nibh sed vestibulum. Donec accumsan fringilla est, porttitor vestibulum dolor ornare id. Sed elementum
      urna sollicitudin commodo ultricies. Curabitur tristique orci et ligula interdum, eu condimentum metus eleifend. Nam libero augue, pharetra at maximus in, pellentesque imperdiet orci.</p>
    <p>Fusce commodo ullamcorper ullamcorper. Etiam eget pellentesque quam, id sodales erat. Vestibulum risus magna, efficitur sed nisl et, rutrum consectetur odio. Sed at lorem non ligula consequat tempus vel nec risus.</p>
  </section>
</article>

দিন এবং অর্ধেক পরে পোকার এবং উত্থিত হওয়ার পরে এবং এখানে দেওয়া হ্যাকি সমাধানগুলিতে খুশি না হয়ে , আমি আবিষ্কার করেছি যে সমস্যাটি একটি নতুন চিত্র অঙ্কন করার সময় উপাদানটিকে স্মৃতিতে রাখার মতো বলে মনে হয়েছিল। সমাধানটি ছিল SVG- র লিনিয়ার গ্রেডিয়েন্টের আইডিটিকে অনন্য করে তোলা, যদিও এটি প্রতি পৃষ্ঠায় কেবল একবারই ব্যবহৃত হত।

এটি বিভিন্ন উপায়ে অর্জন করা যেতে পারে তবে আমাদের কৌণিক অ্যাপ্লিকেশানের জন্য আমরা স্কোপে একটি পরিবর্তনশীল যুক্ত করতে লড্যাশ অনন্য আইড ফাংশনটি ব্যবহার করেছি:

কৌণিক নির্দেশিকা (জেএস):

scope.indicatorColourPatternId = _.uniqueId('IndicatorColourPattern');

এইচটিএমএল আপডেট:

লাইন 5: <linearGradient ng-attr-id="{{indicatorColourPatternId}}" x1="0" x2="0" y1="0" y2="1">

লাইন 11: <rect x="0" y="0" rx="5" ry="5" width="100%" height="100%" ng-attr-fill="url(#{{indicatorColourPatternId}})"/>

আমি আশা করি এই উত্তরটি অন্য কাউকে তাদের কীবোর্ডের মুখমণ্ডল করার জন্য কয়েক দিনের মূল্য সঞ্চয় করবে।


0

আমি রিফ্লোকে বাধ্য করার জন্য একটি হ্যাকিশ এবং আরও আনুষ্ঠানিক উপায়ের পরামর্শ দেব : ফোর্সডোমরফ্লোজেএস ব্যবহার করুন । আপনার ক্ষেত্রে, আপনার কোড নিম্নলিখিত হিসাবে দেখাবে।

sel = document.getElementById('my_id');
forceReflowJS( sel );
return false;

0

আমি দেখতে পেলাম যে উপাদানটিতে কেবল একটি সামগ্রীর স্টাইল যুক্ত করা এটিকে পুনরায় রঙ করতে বাধ্য করেছে, আপনি যখনই এটি পুনরায় চিত্রিত করতে চান প্রতিবারই এটির আলাদা মূল্য হওয়া উচিত এবং ছদ্ম উপাদানটিতে থাকা প্রয়োজন হবে না।

.selector {
    content: '1'
}

0

আমি আরও উত্তর দেওয়ার চেষ্টা করেছি কিন্তু এটি আমার কাজ করে না। অন্য ব্রাউজারগুলির সাথে তুলনার সাথে সাফারিটির সাথে একই ক্লায়েন্টউইথ থাকতে আমার সমস্যা হয়েছিল এবং এই কোডটি সমস্যার সমাধান করেছে:

var get_safe_value = function(elm,callback){
    var sty = elm.style
    sty.transform = "translateZ(1px)";
    var ret = callback(elm)//you can get here the value you want
    sty.transform = "";
    return ret
}
// for safari to have the good clientWidth
var $fBody = document.body //the element you need to fix
var clientW = get_safe_value($fBody,function(elm){return $fBody.clientWidth})

এটি সত্যিই অদ্ভুত কারণ কারণ যদি আমি get_safe_value এর পরে ক্লায়েন্ট উইডথটি পেতে আবার চেষ্টা করি তবে আমি সাফারি দিয়ে একটি খারাপ মান অর্জন করি, প্রাপ্তির মধ্যে sty.transform = "translateZ(1px)"; এবংsty.transform = "";

অন্যান্য সমাধান যা সুনির্দিষ্টভাবে কাজ করে তা হ'ল

var $fBody = document.body //the element you need to fix
$fBody.style.display = 'none';
var temp = $.body.offsetHeight;
$fBody.style.display = ""
temp = $.body.offsetHeight;

var clientW = $fBody.clientWidth

সমস্যাটি হ'ল আপনি ফোকাস হারাবেন এবং স্থিতি স্ক্রোল করুন।


0

ঝাঁকুনি, বিদ্যমান উপাদান টিঙ্কারিং এবং কোনও লেআউট ইস্যু এড়ানোর সময় এটি পুনরায় রঙ করতে বাধ্য করবে ...

function forceRepaint() {
    requestAnimationFrame(()=>{
      const e=document.createElement('DIV');
      e.style='position:fixed;top:0;left:0;bottom:0;right:0;background:#80808001;\
               pointer-events:none;z-index:9999999';
      document.body.appendChild(e);
      requestAnimationFrame(()=>e.remove());  
    });
}

-1

Jquery সহ একটি সহজ সমাধান:

$el.html($el.html());

অথবা

element.innerHTML = element.innerHTML;

এইচটিএমএল যুক্ত করার সময় একটি এসভিজি ছিল যা এটি প্রদর্শন করে না।

এসভিজি উপাদানগুলি স্ক্রিনে আসার পরে এটি যুক্ত করা যায়।

আরও ভাল সমাধান ব্যবহার করা হয়:

document.createElementNS('http://www.w3.org/2000/svg', 'svg');

এবং jQuery সহ:

$(svgDiv).append($(document.createElementNS('http://www.w3.org/2000/svg', 'g'));

এটি ক্রোমে সঠিকভাবে রেন্ডার হবে।


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